Lines Matching refs:chip
154 static int max732x_writeb(struct max732x_chip *chip, int group_a, uint8_t val)
159 client = group_a ? chip->client_group_a : chip->client_group_b;
169 static int max732x_readb(struct max732x_chip *chip, int group_a, uint8_t *val)
174 client = group_a ? chip->client_group_a : chip->client_group_b;
185 static inline int is_group_a(struct max732x_chip *chip, unsigned off)
187 return (1u << off) & chip->mask_group_a;
192 struct max732x_chip *chip = gpiochip_get_data(gc);
196 ret = max732x_readb(chip, is_group_a(chip, off), ®_val);
206 struct max732x_chip *chip = gpiochip_get_data(gc);
210 mutex_lock(&chip->lock);
212 reg_out = (off > 7) ? chip->reg_out[1] : chip->reg_out[0];
215 ret = max732x_writeb(chip, is_group_a(chip, off), reg_out);
221 chip->reg_out[1] = reg_out;
223 chip->reg_out[0] = reg_out;
225 mutex_unlock(&chip->lock);
250 struct max732x_chip *chip = gpiochip_get_data(gc);
253 if ((mask & chip->dir_input) == 0) {
254 dev_dbg(&chip->client->dev, "%s port %d is output only\n",
255 chip->client->name, off);
263 if ((mask & chip->dir_output))
272 struct max732x_chip *chip = gpiochip_get_data(gc);
275 if ((mask & chip->dir_output) == 0) {
276 dev_dbg(&chip->client->dev, "%s port %d is input only\n",
277 chip->client->name, off);
286 static int max732x_writew(struct max732x_chip *chip, uint16_t val)
292 ret = i2c_master_send(chip->client_group_a, (char *)&val, 2);
294 dev_err(&chip->client_group_a->dev, "failed writing\n");
301 static int max732x_readw(struct max732x_chip *chip, uint16_t *val)
305 ret = i2c_master_recv(chip->client_group_a, (char *)val, 2);
307 dev_err(&chip->client_group_a->dev, "failed reading\n");
315 static void max732x_irq_update_mask(struct max732x_chip *chip)
319 if (chip->irq_mask == chip->irq_mask_cur)
322 chip->irq_mask = chip->irq_mask_cur;
324 if (chip->irq_features == INT_NO_MASK)
327 mutex_lock(&chip->lock);
329 switch (chip->irq_features) {
331 msg = (chip->irq_mask << 8) | chip->reg_out[0];
332 max732x_writew(chip, msg);
336 msg = chip->irq_mask | chip->reg_out[0];
337 max732x_writeb(chip, 1, (uint8_t)msg);
341 mutex_unlock(&chip->lock);
347 struct max732x_chip *chip = gpiochip_get_data(gc);
349 chip->irq_mask_cur &= ~(1 << d->hwirq);
356 struct max732x_chip *chip = gpiochip_get_data(gc);
359 chip->irq_mask_cur |= 1 << d->hwirq;
365 struct max732x_chip *chip = gpiochip_get_data(gc);
367 mutex_lock(&chip->irq_lock);
368 chip->irq_mask_cur = chip->irq_mask;
374 struct max732x_chip *chip = gpiochip_get_data(gc);
378 max732x_irq_update_mask(chip);
380 new_irqs = chip->irq_trig_fall | chip->irq_trig_raise;
383 max732x_gpio_direction_input(&chip->gpio_chip, level);
387 mutex_unlock(&chip->irq_lock);
393 struct max732x_chip *chip = gpiochip_get_data(gc);
397 if (!(mask & chip->dir_input)) {
398 dev_dbg(&chip->client->dev, "%s port %d is output only\n",
399 chip->client->name, off);
404 dev_err(&chip->client->dev, "irq %d: unsupported type %d\n",
410 chip->irq_trig_fall |= mask;
412 chip->irq_trig_fall &= ~mask;
415 chip->irq_trig_raise |= mask;
417 chip->irq_trig_raise &= ~mask;
424 struct max732x_chip *chip = irq_data_get_irq_chip_data(data);
426 irq_set_irq_wake(chip->client->irq, on);
442 static uint8_t max732x_irq_pending(struct max732x_chip *chip)
451 ret = max732x_readw(chip, &status);
456 trigger &= chip->irq_mask;
462 cur_stat &= chip->irq_mask;
466 pending = (old_stat & chip->irq_trig_fall) |
467 (cur_stat & chip->irq_trig_raise);
475 struct max732x_chip *chip = devid;
479 pending = max732x_irq_pending(chip);
486 handle_nested_irq(irq_find_mapping(chip->gpio_chip.irq.domain,
495 static int max732x_irq_setup(struct max732x_chip *chip,
498 struct i2c_client *client = chip->client;
506 chip->irq_features = has_irq;
507 mutex_init(&chip->irq_lock);
512 dev_name(&client->dev), chip);
519 girq = &chip->gpio_chip.irq;
535 static int max732x_irq_setup(struct max732x_chip *chip,
538 struct i2c_client *client = chip->client;
548 static int max732x_setup_gpio(struct max732x_chip *chip,
552 struct gpio_chip *gc = &chip->gpio_chip;
561 chip->dir_output |= mask;
564 chip->dir_input |= mask;
567 chip->dir_output |= mask;
568 chip->dir_input |= mask;
575 chip->mask_group_a |= mask;
579 if (chip->dir_input)
581 if (chip->dir_output) {
591 gc->label = chip->client->name;
592 gc->parent = &chip->client->dev;
616 struct max732x_chip *chip;
632 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
633 if (chip == NULL)
635 chip->client = client;
637 nr_port = max732x_setup_gpio(chip, id, pdata->gpio_base);
638 chip->gpio_chip.parent = &client->dev;
645 chip->client_group_a = client;
654 chip->client_group_b = chip->client_dummy = c;
658 chip->client_group_b = client;
667 chip->client_group_a = chip->client_dummy = c;
676 if (nr_port > 8 && !chip->client_dummy) {
682 mutex_init(&chip->lock);
684 ret = max732x_readb(chip, is_group_a(chip, 0), &chip->reg_out[0]);
688 ret = max732x_readb(chip, is_group_a(chip, 8), &chip->reg_out[1]);
693 ret = max732x_irq_setup(chip, id);
697 ret = devm_gpiochip_add_data(&client->dev, &chip->gpio_chip, chip);
701 i2c_set_clientdata(client, chip);