Lines Matching refs:dev
51 dev_err(&client->dev, "Read Error\n"); in adp5588_gpio_read()
61 dev_err(&client->dev, "Write Error\n"); in adp5588_gpio_write()
68 struct adp5588_gpio *dev = in adp5588_gpio_get_value() local
74 mutex_lock(&dev->lock); in adp5588_gpio_get_value()
76 if (dev->dir[bank] & bit) in adp5588_gpio_get_value()
77 val = dev->dat_out[bank]; in adp5588_gpio_get_value()
79 val = adp5588_gpio_read(dev->client, GPIO_DAT_STAT1 + bank); in adp5588_gpio_get_value()
81 mutex_unlock(&dev->lock); in adp5588_gpio_get_value()
90 struct adp5588_gpio *dev = in adp5588_gpio_set_value() local
96 mutex_lock(&dev->lock); in adp5588_gpio_set_value()
98 dev->dat_out[bank] |= bit; in adp5588_gpio_set_value()
100 dev->dat_out[bank] &= ~bit; in adp5588_gpio_set_value()
102 adp5588_gpio_write(dev->client, GPIO_DAT_OUT1 + bank, in adp5588_gpio_set_value()
103 dev->dat_out[bank]); in adp5588_gpio_set_value()
104 mutex_unlock(&dev->lock); in adp5588_gpio_set_value()
111 struct adp5588_gpio *dev = in adp5588_gpio_direction_input() local
116 mutex_lock(&dev->lock); in adp5588_gpio_direction_input()
117 dev->dir[bank] &= ~ADP5588_BIT(off); in adp5588_gpio_direction_input()
118 ret = adp5588_gpio_write(dev->client, GPIO_DIR1 + bank, dev->dir[bank]); in adp5588_gpio_direction_input()
119 mutex_unlock(&dev->lock); in adp5588_gpio_direction_input()
129 struct adp5588_gpio *dev = in adp5588_gpio_direction_output() local
135 mutex_lock(&dev->lock); in adp5588_gpio_direction_output()
136 dev->dir[bank] |= bit; in adp5588_gpio_direction_output()
139 dev->dat_out[bank] |= bit; in adp5588_gpio_direction_output()
141 dev->dat_out[bank] &= ~bit; in adp5588_gpio_direction_output()
143 ret = adp5588_gpio_write(dev->client, GPIO_DAT_OUT1 + bank, in adp5588_gpio_direction_output()
144 dev->dat_out[bank]); in adp5588_gpio_direction_output()
145 ret |= adp5588_gpio_write(dev->client, GPIO_DIR1 + bank, in adp5588_gpio_direction_output()
146 dev->dir[bank]); in adp5588_gpio_direction_output()
147 mutex_unlock(&dev->lock); in adp5588_gpio_direction_output()
155 struct adp5588_gpio *dev = in adp5588_gpio_to_irq() local
157 return dev->irq_base + off; in adp5588_gpio_to_irq()
162 struct adp5588_gpio *dev = irq_data_get_irq_chip_data(d); in adp5588_irq_bus_lock() local
164 mutex_lock(&dev->irq_lock); in adp5588_irq_bus_lock()
177 struct adp5588_gpio *dev = irq_data_get_irq_chip_data(d); in adp5588_irq_bus_sync_unlock() local
181 if (dev->int_en[i] ^ dev->irq_mask[i]) { in adp5588_irq_bus_sync_unlock()
182 dev->int_en[i] = dev->irq_mask[i]; in adp5588_irq_bus_sync_unlock()
183 adp5588_gpio_write(dev->client, GPIO_INT_EN1 + i, in adp5588_irq_bus_sync_unlock()
184 dev->int_en[i]); in adp5588_irq_bus_sync_unlock()
187 mutex_unlock(&dev->irq_lock); in adp5588_irq_bus_sync_unlock()
192 struct adp5588_gpio *dev = irq_data_get_irq_chip_data(d); in adp5588_irq_mask() local
193 unsigned gpio = d->irq - dev->irq_base; in adp5588_irq_mask()
195 dev->irq_mask[ADP5588_BANK(gpio)] &= ~ADP5588_BIT(gpio); in adp5588_irq_mask()
200 struct adp5588_gpio *dev = irq_data_get_irq_chip_data(d); in adp5588_irq_unmask() local
201 unsigned gpio = d->irq - dev->irq_base; in adp5588_irq_unmask()
203 dev->irq_mask[ADP5588_BANK(gpio)] |= ADP5588_BIT(gpio); in adp5588_irq_unmask()
208 struct adp5588_gpio *dev = irq_data_get_irq_chip_data(d); in adp5588_irq_set_type() local
209 uint16_t gpio = d->irq - dev->irq_base; in adp5588_irq_set_type()
213 dev_err(&dev->client->dev, "irq %d: unsupported type %d\n", in adp5588_irq_set_type()
222 dev->int_lvl[bank] |= bit; in adp5588_irq_set_type()
224 dev->int_lvl[bank] &= ~bit; in adp5588_irq_set_type()
228 adp5588_gpio_direction_input(&dev->gpio_chip, gpio); in adp5588_irq_set_type()
229 adp5588_gpio_write(dev->client, GPIO_INT_LVL1 + bank, in adp5588_irq_set_type()
230 dev->int_lvl[bank]); in adp5588_irq_set_type()
249 dev_err(&client->dev, "Read INT_STAT Error\n"); in adp5588_gpio_read_intstat()
256 struct adp5588_gpio *dev = devid; in adp5588_irq_handler() local
259 status = adp5588_gpio_read(dev->client, INT_STAT); in adp5588_irq_handler()
262 ret = adp5588_gpio_read_intstat(dev->client, dev->irq_stat); in adp5588_irq_handler()
264 memset(dev->irq_stat, 0, ARRAY_SIZE(dev->irq_stat)); in adp5588_irq_handler()
268 pending = dev->irq_stat[bank] & dev->irq_mask[bank]; in adp5588_irq_handler()
272 handle_nested_irq(dev->irq_base + in adp5588_irq_handler()
282 adp5588_gpio_write(dev->client, INT_STAT, status); /* Status is W1C */ in adp5588_irq_handler()
287 static int adp5588_irq_setup(struct adp5588_gpio *dev) in adp5588_irq_setup() argument
289 struct i2c_client *client = dev->client; in adp5588_irq_setup()
291 dev_get_platdata(&client->dev); in adp5588_irq_setup()
297 adp5588_gpio_read_intstat(client, dev->irq_stat); /* read to clear */ in adp5588_irq_setup()
299 dev->irq_base = pdata->irq_base; in adp5588_irq_setup()
300 mutex_init(&dev->irq_lock); in adp5588_irq_setup()
302 for (gpio = 0; gpio < dev->gpio_chip.ngpio; gpio++) { in adp5588_irq_setup()
303 int irq = gpio + dev->irq_base; in adp5588_irq_setup()
304 irq_set_chip_data(irq, dev); in adp5588_irq_setup()
315 dev_name(&client->dev), dev); in adp5588_irq_setup()
317 dev_err(&client->dev, "failed to request irq %d\n", in adp5588_irq_setup()
322 dev->gpio_chip.to_irq = adp5588_gpio_to_irq; in adp5588_irq_setup()
329 dev->irq_base = 0; in adp5588_irq_setup()
333 static void adp5588_irq_teardown(struct adp5588_gpio *dev) in adp5588_irq_teardown() argument
335 if (dev->irq_base) in adp5588_irq_teardown()
336 free_irq(dev->client->irq, dev); in adp5588_irq_teardown()
340 static int adp5588_irq_setup(struct adp5588_gpio *dev) in adp5588_irq_setup() argument
342 struct i2c_client *client = dev->client; in adp5588_irq_setup()
343 dev_warn(&client->dev, "interrupt support not compiled in\n"); in adp5588_irq_setup()
348 static void adp5588_irq_teardown(struct adp5588_gpio *dev) in adp5588_irq_teardown() argument
357 dev_get_platdata(&client->dev); in adp5588_gpio_probe()
358 struct adp5588_gpio *dev; in adp5588_gpio_probe() local
363 dev_err(&client->dev, "missing platform data\n"); in adp5588_gpio_probe()
369 dev_err(&client->dev, "SMBUS Byte Data not Supported\n"); in adp5588_gpio_probe()
373 dev = devm_kzalloc(&client->dev, sizeof(*dev), GFP_KERNEL); in adp5588_gpio_probe()
374 if (!dev) in adp5588_gpio_probe()
377 dev->client = client; in adp5588_gpio_probe()
379 gc = &dev->gpio_chip; in adp5588_gpio_probe()
392 mutex_init(&dev->lock); in adp5588_gpio_probe()
394 ret = adp5588_gpio_read(dev->client, DEV_ID); in adp5588_gpio_probe()
401 dev->dat_out[i] = adp5588_gpio_read(client, GPIO_DAT_OUT1 + i); in adp5588_gpio_probe()
402 dev->dir[i] = adp5588_gpio_read(client, GPIO_DIR1 + i); in adp5588_gpio_probe()
413 dev_warn(&client->dev, "GPIO int not supported\n"); in adp5588_gpio_probe()
415 ret = adp5588_irq_setup(dev); in adp5588_gpio_probe()
421 ret = gpiochip_add(&dev->gpio_chip); in adp5588_gpio_probe()
425 dev_info(&client->dev, "IRQ Base: %d Rev.: %d\n", in adp5588_gpio_probe()
431 dev_warn(&client->dev, "setup failed, %d\n", ret); in adp5588_gpio_probe()
434 i2c_set_clientdata(client, dev); in adp5588_gpio_probe()
439 adp5588_irq_teardown(dev); in adp5588_gpio_probe()
447 dev_get_platdata(&client->dev); in adp5588_gpio_remove()
448 struct adp5588_gpio *dev = i2c_get_clientdata(client); in adp5588_gpio_remove() local
453 dev->gpio_chip.base, dev->gpio_chip.ngpio, in adp5588_gpio_remove()
456 dev_err(&client->dev, "teardown failed %d\n", ret); in adp5588_gpio_remove()
461 if (dev->irq_base) in adp5588_gpio_remove()
462 free_irq(dev->client->irq, dev); in adp5588_gpio_remove()
464 gpiochip_remove(&dev->gpio_chip); in adp5588_gpio_remove()