Lines Matching refs:chip

166 static int max732x_writeb(struct max732x_chip *chip, int group_a, uint8_t val)  in max732x_writeb()  argument
171 client = group_a ? chip->client_group_a : chip->client_group_b; in max732x_writeb()
181 static int max732x_readb(struct max732x_chip *chip, int group_a, uint8_t *val) in max732x_readb() argument
186 client = group_a ? chip->client_group_a : chip->client_group_b; in max732x_readb()
197 static inline int is_group_a(struct max732x_chip *chip, unsigned off) in is_group_a() argument
199 return (1u << off) & chip->mask_group_a; in is_group_a()
204 struct max732x_chip *chip = to_max732x(gc); in max732x_gpio_get_value() local
208 ret = max732x_readb(chip, is_group_a(chip, off), &reg_val); in max732x_gpio_get_value()
218 struct max732x_chip *chip = to_max732x(gc); in max732x_gpio_set_mask() local
222 mutex_lock(&chip->lock); in max732x_gpio_set_mask()
224 reg_out = (off > 7) ? chip->reg_out[1] : chip->reg_out[0]; in max732x_gpio_set_mask()
227 ret = max732x_writeb(chip, is_group_a(chip, off), reg_out); in max732x_gpio_set_mask()
233 chip->reg_out[1] = reg_out; in max732x_gpio_set_mask()
235 chip->reg_out[0] = reg_out; in max732x_gpio_set_mask()
237 mutex_unlock(&chip->lock); in max732x_gpio_set_mask()
262 struct max732x_chip *chip = to_max732x(gc); in max732x_gpio_direction_input() local
265 if ((mask & chip->dir_input) == 0) { in max732x_gpio_direction_input()
266 dev_dbg(&chip->client->dev, "%s port %d is output only\n", in max732x_gpio_direction_input()
267 chip->client->name, off); in max732x_gpio_direction_input()
275 if ((mask & chip->dir_output)) in max732x_gpio_direction_input()
284 struct max732x_chip *chip = to_max732x(gc); in max732x_gpio_direction_output() local
287 if ((mask & chip->dir_output) == 0) { in max732x_gpio_direction_output()
288 dev_dbg(&chip->client->dev, "%s port %d is input only\n", in max732x_gpio_direction_output()
289 chip->client->name, off); in max732x_gpio_direction_output()
298 static int max732x_writew(struct max732x_chip *chip, uint16_t val) in max732x_writew() argument
304 ret = i2c_master_send(chip->client_group_a, (char *)&val, 2); in max732x_writew()
306 dev_err(&chip->client_group_a->dev, "failed writing\n"); in max732x_writew()
313 static int max732x_readw(struct max732x_chip *chip, uint16_t *val) in max732x_readw() argument
317 ret = i2c_master_recv(chip->client_group_a, (char *)val, 2); in max732x_readw()
319 dev_err(&chip->client_group_a->dev, "failed reading\n"); in max732x_readw()
327 static void max732x_irq_update_mask(struct max732x_chip *chip) in max732x_irq_update_mask() argument
331 if (chip->irq_mask == chip->irq_mask_cur) in max732x_irq_update_mask()
334 chip->irq_mask = chip->irq_mask_cur; in max732x_irq_update_mask()
336 if (chip->irq_features == INT_NO_MASK) in max732x_irq_update_mask()
339 mutex_lock(&chip->lock); in max732x_irq_update_mask()
341 switch (chip->irq_features) { in max732x_irq_update_mask()
343 msg = (chip->irq_mask << 8) | chip->reg_out[0]; in max732x_irq_update_mask()
344 max732x_writew(chip, msg); in max732x_irq_update_mask()
348 msg = chip->irq_mask | chip->reg_out[0]; in max732x_irq_update_mask()
349 max732x_writeb(chip, 1, (uint8_t)msg); in max732x_irq_update_mask()
353 mutex_unlock(&chip->lock); in max732x_irq_update_mask()
359 struct max732x_chip *chip = to_max732x(gc); in max732x_irq_mask() local
361 chip->irq_mask_cur &= ~(1 << d->hwirq); in max732x_irq_mask()
367 struct max732x_chip *chip = to_max732x(gc); in max732x_irq_unmask() local
369 chip->irq_mask_cur |= 1 << d->hwirq; in max732x_irq_unmask()
375 struct max732x_chip *chip = to_max732x(gc); in max732x_irq_bus_lock() local
377 mutex_lock(&chip->irq_lock); in max732x_irq_bus_lock()
378 chip->irq_mask_cur = chip->irq_mask; in max732x_irq_bus_lock()
384 struct max732x_chip *chip = to_max732x(gc); in max732x_irq_bus_sync_unlock() local
388 max732x_irq_update_mask(chip); in max732x_irq_bus_sync_unlock()
390 new_irqs = chip->irq_trig_fall | chip->irq_trig_raise; in max732x_irq_bus_sync_unlock()
393 max732x_gpio_direction_input(&chip->gpio_chip, level); in max732x_irq_bus_sync_unlock()
397 mutex_unlock(&chip->irq_lock); in max732x_irq_bus_sync_unlock()
403 struct max732x_chip *chip = to_max732x(gc); in max732x_irq_set_type() local
407 if (!(mask & chip->dir_input)) { in max732x_irq_set_type()
408 dev_dbg(&chip->client->dev, "%s port %d is output only\n", in max732x_irq_set_type()
409 chip->client->name, off); in max732x_irq_set_type()
414 dev_err(&chip->client->dev, "irq %d: unsupported type %d\n", in max732x_irq_set_type()
420 chip->irq_trig_fall |= mask; in max732x_irq_set_type()
422 chip->irq_trig_fall &= ~mask; in max732x_irq_set_type()
425 chip->irq_trig_raise |= mask; in max732x_irq_set_type()
427 chip->irq_trig_raise &= ~mask; in max732x_irq_set_type()
434 struct max732x_chip *chip = irq_data_get_irq_chip_data(data); in max732x_irq_set_wake() local
436 irq_set_irq_wake(chip->client->irq, on); in max732x_irq_set_wake()
450 static uint8_t max732x_irq_pending(struct max732x_chip *chip) in max732x_irq_pending() argument
459 ret = max732x_readw(chip, &status); in max732x_irq_pending()
464 trigger &= chip->irq_mask; in max732x_irq_pending()
470 cur_stat &= chip->irq_mask; in max732x_irq_pending()
474 pending = (old_stat & chip->irq_trig_fall) | in max732x_irq_pending()
475 (cur_stat & chip->irq_trig_raise); in max732x_irq_pending()
483 struct max732x_chip *chip = devid; in max732x_irq_handler() local
487 pending = max732x_irq_pending(chip); in max732x_irq_handler()
494 handle_nested_irq(irq_find_mapping(chip->gpio_chip.irqdomain, in max732x_irq_handler()
503 static int max732x_irq_setup(struct max732x_chip *chip, in max732x_irq_setup() argument
506 struct i2c_client *client = chip->client; in max732x_irq_setup()
516 chip->irq_features = has_irq; in max732x_irq_setup()
517 mutex_init(&chip->irq_lock); in max732x_irq_setup()
522 dev_name(&client->dev), chip); in max732x_irq_setup()
528 ret = gpiochip_irqchip_add(&chip->gpio_chip, in max732x_irq_setup()
538 gpiochip_set_chained_irqchip(&chip->gpio_chip, in max732x_irq_setup()
548 static int max732x_irq_setup(struct max732x_chip *chip, in max732x_irq_setup() argument
551 struct i2c_client *client = chip->client; in max732x_irq_setup()
562 static int max732x_setup_gpio(struct max732x_chip *chip, in max732x_setup_gpio() argument
566 struct gpio_chip *gc = &chip->gpio_chip; in max732x_setup_gpio()
575 chip->dir_output |= mask; in max732x_setup_gpio()
578 chip->dir_input |= mask; in max732x_setup_gpio()
581 chip->dir_output |= mask; in max732x_setup_gpio()
582 chip->dir_input |= mask; in max732x_setup_gpio()
589 chip->mask_group_a |= mask; in max732x_setup_gpio()
593 if (chip->dir_input) in max732x_setup_gpio()
595 if (chip->dir_output) { in max732x_setup_gpio()
605 gc->label = chip->client->name; in max732x_setup_gpio()
606 gc->dev = &chip->client->dev; in max732x_setup_gpio()
630 struct max732x_chip *chip; in max732x_probe() local
646 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); in max732x_probe()
647 if (chip == NULL) in max732x_probe()
649 chip->client = client; in max732x_probe()
651 nr_port = max732x_setup_gpio(chip, id, pdata->gpio_base); in max732x_probe()
652 chip->gpio_chip.dev = &client->dev; in max732x_probe()
659 chip->client_group_a = client; in max732x_probe()
662 chip->client_group_b = chip->client_dummy = c; in max732x_probe()
666 chip->client_group_b = client; in max732x_probe()
669 chip->client_group_a = chip->client_dummy = c; in max732x_probe()
679 if (nr_port > 8 && !chip->client_dummy) { in max732x_probe()
686 mutex_init(&chip->lock); in max732x_probe()
688 ret = max732x_readb(chip, is_group_a(chip, 0), &chip->reg_out[0]); in max732x_probe()
692 ret = max732x_readb(chip, is_group_a(chip, 8), &chip->reg_out[1]); in max732x_probe()
697 ret = gpiochip_add(&chip->gpio_chip); in max732x_probe()
701 ret = max732x_irq_setup(chip, id); in max732x_probe()
703 gpiochip_remove(&chip->gpio_chip); in max732x_probe()
708 ret = pdata->setup(client, chip->gpio_chip.base, in max732x_probe()
709 chip->gpio_chip.ngpio, pdata->context); in max732x_probe()
714 i2c_set_clientdata(client, chip); in max732x_probe()
718 if (chip->client_dummy) in max732x_probe()
719 i2c_unregister_device(chip->client_dummy); in max732x_probe()
726 struct max732x_chip *chip = i2c_get_clientdata(client); in max732x_remove() local
731 ret = pdata->teardown(client, chip->gpio_chip.base, in max732x_remove()
732 chip->gpio_chip.ngpio, pdata->context); in max732x_remove()
740 gpiochip_remove(&chip->gpio_chip); in max732x_remove()
743 if (chip->client_dummy) in max732x_remove()
744 i2c_unregister_device(chip->client_dummy); in max732x_remove()