Lines Matching refs:chip

158 static int max732x_writeb(struct max732x_chip *chip, int group_a, uint8_t val)
163 client = group_a ? chip->client_group_a : chip->client_group_b;
173 static int max732x_readb(struct max732x_chip *chip, int group_a, uint8_t *val)
178 client = group_a ? chip->client_group_a : chip->client_group_b;
189 static inline int is_group_a(struct max732x_chip *chip, unsigned off)
191 return (1u << off) & chip->mask_group_a;
196 struct max732x_chip *chip = gpiochip_get_data(gc);
200 ret = max732x_readb(chip, is_group_a(chip, off), &reg_val);
210 struct max732x_chip *chip = gpiochip_get_data(gc);
214 mutex_lock(&chip->lock);
216 reg_out = (off > 7) ? chip->reg_out[1] : chip->reg_out[0];
219 ret = max732x_writeb(chip, is_group_a(chip, off), reg_out);
225 chip->reg_out[1] = reg_out;
227 chip->reg_out[0] = reg_out;
229 mutex_unlock(&chip->lock);
254 struct max732x_chip *chip = gpiochip_get_data(gc);
257 if ((mask & chip->dir_input) == 0) {
258 dev_dbg(&chip->client->dev, "%s port %d is output only\n",
259 chip->client->name, off);
267 if ((mask & chip->dir_output))
276 struct max732x_chip *chip = gpiochip_get_data(gc);
279 if ((mask & chip->dir_output) == 0) {
280 dev_dbg(&chip->client->dev, "%s port %d is input only\n",
281 chip->client->name, off);
290 static int max732x_writew(struct max732x_chip *chip, uint16_t val)
296 ret = i2c_master_send(chip->client_group_a, (char *)&val, 2);
298 dev_err(&chip->client_group_a->dev, "failed writing\n");
305 static int max732x_readw(struct max732x_chip *chip, uint16_t *val)
309 ret = i2c_master_recv(chip->client_group_a, (char *)val, 2);
311 dev_err(&chip->client_group_a->dev, "failed reading\n");
319 static void max732x_irq_update_mask(struct max732x_chip *chip)
323 if (chip->irq_mask == chip->irq_mask_cur)
326 chip->irq_mask = chip->irq_mask_cur;
328 if (chip->irq_features == INT_NO_MASK)
331 mutex_lock(&chip->lock);
333 switch (chip->irq_features) {
335 msg = (chip->irq_mask << 8) | chip->reg_out[0];
336 max732x_writew(chip, msg);
340 msg = chip->irq_mask | chip->reg_out[0];
341 max732x_writeb(chip, 1, (uint8_t)msg);
345 mutex_unlock(&chip->lock);
351 struct max732x_chip *chip = gpiochip_get_data(gc);
353 chip->irq_mask_cur &= ~(1 << d->hwirq);
359 struct max732x_chip *chip = gpiochip_get_data(gc);
361 chip->irq_mask_cur |= 1 << d->hwirq;
367 struct max732x_chip *chip = gpiochip_get_data(gc);
369 mutex_lock(&chip->irq_lock);
370 chip->irq_mask_cur = chip->irq_mask;
376 struct max732x_chip *chip = gpiochip_get_data(gc);
380 max732x_irq_update_mask(chip);
382 new_irqs = chip->irq_trig_fall | chip->irq_trig_raise;
385 max732x_gpio_direction_input(&chip->gpio_chip, level);
389 mutex_unlock(&chip->irq_lock);
395 struct max732x_chip *chip = gpiochip_get_data(gc);
399 if (!(mask & chip->dir_input)) {
400 dev_dbg(&chip->client->dev, "%s port %d is output only\n",
401 chip->client->name, off);
406 dev_err(&chip->client->dev, "irq %d: unsupported type %d\n",
412 chip->irq_trig_fall |= mask;
414 chip->irq_trig_fall &= ~mask;
417 chip->irq_trig_raise |= mask;
419 chip->irq_trig_raise &= ~mask;
426 struct max732x_chip *chip = irq_data_get_irq_chip_data(data);
428 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;
510 chip->irq_features = has_irq;
511 mutex_init(&chip->irq_lock);
516 dev_name(&client->dev), chip);
523 girq = &chip->gpio_chip.irq;
524 girq->chip = &max732x_irq_chip;
539 static int max732x_irq_setup(struct max732x_chip *chip,
542 struct i2c_client *client = chip->client;
553 static int max732x_setup_gpio(struct max732x_chip *chip,
557 struct gpio_chip *gc = &chip->gpio_chip;
566 chip->dir_output |= mask;
569 chip->dir_input |= mask;
572 chip->dir_output |= mask;
573 chip->dir_input |= mask;
580 chip->mask_group_a |= mask;
584 if (chip->dir_input)
586 if (chip->dir_output) {
596 gc->label = chip->client->name;
597 gc->parent = &chip->client->dev;
621 struct max732x_chip *chip;
637 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
638 if (chip == NULL)
640 chip->client = client;
642 nr_port = max732x_setup_gpio(chip, id, pdata->gpio_base);
643 chip->gpio_chip.parent = &client->dev;
650 chip->client_group_a = client;
659 chip->client_group_b = chip->client_dummy = c;
663 chip->client_group_b = client;
672 chip->client_group_a = chip->client_dummy = c;
681 if (nr_port > 8 && !chip->client_dummy) {
687 mutex_init(&chip->lock);
689 ret = max732x_readb(chip, is_group_a(chip, 0), &chip->reg_out[0]);
693 ret = max732x_readb(chip, is_group_a(chip, 8), &chip->reg_out[1]);
698 ret = max732x_irq_setup(chip, id);
702 ret = devm_gpiochip_add_data(&client->dev, &chip->gpio_chip, chip);
707 ret = pdata->setup(client, chip->gpio_chip.base,
708 chip->gpio_chip.ngpio, pdata->context);
713 i2c_set_clientdata(client, chip);
720 struct max732x_chip *chip = i2c_get_clientdata(client);
725 ret = pdata->teardown(client, chip->gpio_chip.base,
726 chip->gpio_chip.ngpio, pdata->context);