Lines Matching refs:adnp

23 struct adnp {  struct
39 static inline struct adnp *to_adnp(struct gpio_chip *chip) in to_adnp() argument
41 return container_of(chip, struct adnp, gpio); in to_adnp()
44 static int adnp_read(struct adnp *adnp, unsigned offset, uint8_t *value) in adnp_read() argument
48 err = i2c_smbus_read_byte_data(adnp->client, offset); in adnp_read()
50 dev_err(adnp->gpio.dev, "%s failed: %d\n", in adnp_read()
59 static int adnp_write(struct adnp *adnp, unsigned offset, uint8_t value) in adnp_write() argument
63 err = i2c_smbus_write_byte_data(adnp->client, offset, value); in adnp_write()
65 dev_err(adnp->gpio.dev, "%s failed: %d\n", in adnp_write()
75 struct adnp *adnp = to_adnp(chip); in adnp_gpio_get() local
76 unsigned int reg = offset >> adnp->reg_shift; in adnp_gpio_get()
81 err = adnp_read(adnp, GPIO_PLR(adnp) + reg, &value); in adnp_gpio_get()
88 static void __adnp_gpio_set(struct adnp *adnp, unsigned offset, int value) in __adnp_gpio_set() argument
90 unsigned int reg = offset >> adnp->reg_shift; in __adnp_gpio_set()
95 err = adnp_read(adnp, GPIO_PLR(adnp) + reg, &val); in __adnp_gpio_set()
104 adnp_write(adnp, GPIO_PLR(adnp) + reg, val); in __adnp_gpio_set()
109 struct adnp *adnp = to_adnp(chip); in adnp_gpio_set() local
111 mutex_lock(&adnp->i2c_lock); in adnp_gpio_set()
112 __adnp_gpio_set(adnp, offset, value); in adnp_gpio_set()
113 mutex_unlock(&adnp->i2c_lock); in adnp_gpio_set()
118 struct adnp *adnp = to_adnp(chip); in adnp_gpio_direction_input() local
119 unsigned int reg = offset >> adnp->reg_shift; in adnp_gpio_direction_input()
124 mutex_lock(&adnp->i2c_lock); in adnp_gpio_direction_input()
126 err = adnp_read(adnp, GPIO_DDR(adnp) + reg, &value); in adnp_gpio_direction_input()
132 err = adnp_write(adnp, GPIO_DDR(adnp) + reg, value); in adnp_gpio_direction_input()
136 err = adnp_read(adnp, GPIO_DDR(adnp) + reg, &value); in adnp_gpio_direction_input()
146 mutex_unlock(&adnp->i2c_lock); in adnp_gpio_direction_input()
153 struct adnp *adnp = to_adnp(chip); in adnp_gpio_direction_output() local
154 unsigned int reg = offset >> adnp->reg_shift; in adnp_gpio_direction_output()
159 mutex_lock(&adnp->i2c_lock); in adnp_gpio_direction_output()
161 err = adnp_read(adnp, GPIO_DDR(adnp) + reg, &val); in adnp_gpio_direction_output()
167 err = adnp_write(adnp, GPIO_DDR(adnp) + reg, val); in adnp_gpio_direction_output()
171 err = adnp_read(adnp, GPIO_DDR(adnp) + reg, &val); in adnp_gpio_direction_output()
180 __adnp_gpio_set(adnp, offset, value); in adnp_gpio_direction_output()
184 mutex_unlock(&adnp->i2c_lock); in adnp_gpio_direction_output()
190 struct adnp *adnp = to_adnp(chip); in adnp_gpio_dbg_show() local
191 unsigned int num_regs = 1 << adnp->reg_shift, i, j; in adnp_gpio_dbg_show()
197 mutex_lock(&adnp->i2c_lock); in adnp_gpio_dbg_show()
199 err = adnp_read(adnp, GPIO_DDR(adnp) + i, &ddr); in adnp_gpio_dbg_show()
201 mutex_unlock(&adnp->i2c_lock); in adnp_gpio_dbg_show()
205 err = adnp_read(adnp, GPIO_PLR(adnp) + i, &plr); in adnp_gpio_dbg_show()
207 mutex_unlock(&adnp->i2c_lock); in adnp_gpio_dbg_show()
211 err = adnp_read(adnp, GPIO_IER(adnp) + i, &ier); in adnp_gpio_dbg_show()
213 mutex_unlock(&adnp->i2c_lock); in adnp_gpio_dbg_show()
217 err = adnp_read(adnp, GPIO_ISR(adnp) + i, &isr); in adnp_gpio_dbg_show()
219 mutex_unlock(&adnp->i2c_lock); in adnp_gpio_dbg_show()
223 mutex_unlock(&adnp->i2c_lock); in adnp_gpio_dbg_show()
226 unsigned int bit = (i << adnp->reg_shift) + j; in adnp_gpio_dbg_show()
250 static int adnp_gpio_setup(struct adnp *adnp, unsigned int num_gpios) in adnp_gpio_setup() argument
252 struct gpio_chip *chip = &adnp->gpio; in adnp_gpio_setup()
255 adnp->reg_shift = get_count_order(num_gpios) - 3; in adnp_gpio_setup()
268 chip->label = adnp->client->name; in adnp_gpio_setup()
269 chip->dev = &adnp->client->dev; in adnp_gpio_setup()
282 struct adnp *adnp = data; in adnp_irq() local
285 num_regs = 1 << adnp->reg_shift; in adnp_irq()
288 unsigned int base = i << adnp->reg_shift, bit; in adnp_irq()
293 mutex_lock(&adnp->i2c_lock); in adnp_irq()
295 err = adnp_read(adnp, GPIO_PLR(adnp) + i, &level); in adnp_irq()
297 mutex_unlock(&adnp->i2c_lock); in adnp_irq()
301 err = adnp_read(adnp, GPIO_ISR(adnp) + i, &isr); in adnp_irq()
303 mutex_unlock(&adnp->i2c_lock); in adnp_irq()
307 err = adnp_read(adnp, GPIO_IER(adnp) + i, &ier); in adnp_irq()
309 mutex_unlock(&adnp->i2c_lock); in adnp_irq()
313 mutex_unlock(&adnp->i2c_lock); in adnp_irq()
316 changed = level ^ adnp->irq_level[i]; in adnp_irq()
319 pending = changed & ((adnp->irq_fall[i] & ~level) | in adnp_irq()
320 (adnp->irq_rise[i] & level)); in adnp_irq()
323 pending |= (adnp->irq_high[i] & level) | in adnp_irq()
324 (adnp->irq_low[i] & ~level); in adnp_irq()
331 child_irq = irq_find_mapping(adnp->gpio.irqdomain, in adnp_irq()
343 struct adnp *adnp = to_adnp(gc); in adnp_irq_mask() local
344 unsigned int reg = d->hwirq >> adnp->reg_shift; in adnp_irq_mask()
347 adnp->irq_enable[reg] &= ~BIT(pos); in adnp_irq_mask()
353 struct adnp *adnp = to_adnp(gc); in adnp_irq_unmask() local
354 unsigned int reg = d->hwirq >> adnp->reg_shift; in adnp_irq_unmask()
357 adnp->irq_enable[reg] |= BIT(pos); in adnp_irq_unmask()
363 struct adnp *adnp = to_adnp(gc); in adnp_irq_set_type() local
364 unsigned int reg = d->hwirq >> adnp->reg_shift; in adnp_irq_set_type()
368 adnp->irq_rise[reg] |= BIT(pos); in adnp_irq_set_type()
370 adnp->irq_rise[reg] &= ~BIT(pos); in adnp_irq_set_type()
373 adnp->irq_fall[reg] |= BIT(pos); in adnp_irq_set_type()
375 adnp->irq_fall[reg] &= ~BIT(pos); in adnp_irq_set_type()
378 adnp->irq_high[reg] |= BIT(pos); in adnp_irq_set_type()
380 adnp->irq_high[reg] &= ~BIT(pos); in adnp_irq_set_type()
383 adnp->irq_low[reg] |= BIT(pos); in adnp_irq_set_type()
385 adnp->irq_low[reg] &= ~BIT(pos); in adnp_irq_set_type()
393 struct adnp *adnp = to_adnp(gc); in adnp_irq_bus_lock() local
395 mutex_lock(&adnp->irq_lock); in adnp_irq_bus_lock()
401 struct adnp *adnp = to_adnp(gc); in adnp_irq_bus_unlock() local
402 unsigned int num_regs = 1 << adnp->reg_shift, i; in adnp_irq_bus_unlock()
404 mutex_lock(&adnp->i2c_lock); in adnp_irq_bus_unlock()
407 adnp_write(adnp, GPIO_IER(adnp) + i, adnp->irq_enable[i]); in adnp_irq_bus_unlock()
409 mutex_unlock(&adnp->i2c_lock); in adnp_irq_bus_unlock()
410 mutex_unlock(&adnp->irq_lock); in adnp_irq_bus_unlock()
422 static int adnp_irq_setup(struct adnp *adnp) in adnp_irq_setup() argument
424 unsigned int num_regs = 1 << adnp->reg_shift, i; in adnp_irq_setup()
425 struct gpio_chip *chip = &adnp->gpio; in adnp_irq_setup()
428 mutex_init(&adnp->irq_lock); in adnp_irq_setup()
438 adnp->irq_enable = devm_kzalloc(chip->dev, num_regs * 6, GFP_KERNEL); in adnp_irq_setup()
439 if (!adnp->irq_enable) in adnp_irq_setup()
442 adnp->irq_level = adnp->irq_enable + (num_regs * 1); in adnp_irq_setup()
443 adnp->irq_rise = adnp->irq_enable + (num_regs * 2); in adnp_irq_setup()
444 adnp->irq_fall = adnp->irq_enable + (num_regs * 3); in adnp_irq_setup()
445 adnp->irq_high = adnp->irq_enable + (num_regs * 4); in adnp_irq_setup()
446 adnp->irq_low = adnp->irq_enable + (num_regs * 5); in adnp_irq_setup()
453 err = adnp_read(adnp, GPIO_PLR(adnp) + i, &adnp->irq_level[i]); in adnp_irq_setup()
458 err = adnp_write(adnp, GPIO_IER(adnp) + i, 0); in adnp_irq_setup()
462 adnp->irq_enable[i] = 0x00; in adnp_irq_setup()
465 err = devm_request_threaded_irq(chip->dev, adnp->client->irq, in adnp_irq_setup()
468 dev_name(chip->dev), adnp); in adnp_irq_setup()
471 adnp->client->irq, err); in adnp_irq_setup()
493 struct adnp *adnp; in adnp_i2c_probe() local
505 adnp = devm_kzalloc(&client->dev, sizeof(*adnp), GFP_KERNEL); in adnp_i2c_probe()
506 if (!adnp) in adnp_i2c_probe()
509 mutex_init(&adnp->i2c_lock); in adnp_i2c_probe()
510 adnp->client = client; in adnp_i2c_probe()
512 err = adnp_gpio_setup(adnp, num_gpios); in adnp_i2c_probe()
517 err = adnp_irq_setup(adnp); in adnp_i2c_probe()
522 i2c_set_clientdata(client, adnp); in adnp_i2c_probe()
529 struct adnp *adnp = i2c_get_clientdata(client); in adnp_i2c_remove() local
531 gpiochip_remove(&adnp->gpio); in adnp_i2c_remove()