Lines Matching +full:client +full:- +full:id

1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * LEDs : drivers/led/leds-adp5520
6 * GPIO : drivers/gpio/adp5520-gpio (ADP5520 only)
7 * Keys : drivers/input/keyboard/adp5520-keys (ADP5520 only)
17 * Copyright (C) 2006-2008 Marvell International Ltd.
33 struct i2c_client *client; member
38 unsigned long id; member
42 static int __adp5520_read(struct i2c_client *client, in __adp5520_read() argument
47 ret = i2c_smbus_read_byte_data(client, reg); in __adp5520_read()
49 dev_err(&client->dev, "failed reading at 0x%02x\n", reg); in __adp5520_read()
57 static int __adp5520_write(struct i2c_client *client, in __adp5520_write() argument
62 ret = i2c_smbus_write_byte_data(client, reg, val); in __adp5520_write()
64 dev_err(&client->dev, "failed writing 0x%02x to 0x%02x\n", in __adp5520_write()
71 static int __adp5520_ack_bits(struct i2c_client *client, int reg, in __adp5520_ack_bits() argument
74 struct adp5520_chip *chip = i2c_get_clientdata(client); in __adp5520_ack_bits()
78 mutex_lock(&chip->lock); in __adp5520_ack_bits()
80 ret = __adp5520_read(client, reg, &reg_val); in __adp5520_ack_bits()
84 ret = __adp5520_write(client, reg, reg_val); in __adp5520_ack_bits()
87 mutex_unlock(&chip->lock); in __adp5520_ack_bits()
109 mutex_lock(&chip->lock); in adp5520_set_bits()
111 ret = __adp5520_read(chip->client, reg, &reg_val); in adp5520_set_bits()
115 ret = __adp5520_write(chip->client, reg, reg_val); in adp5520_set_bits()
118 mutex_unlock(&chip->lock); in adp5520_set_bits()
129 mutex_lock(&chip->lock); in adp5520_clr_bits()
131 ret = __adp5520_read(chip->client, reg, &reg_val); in adp5520_clr_bits()
135 ret = __adp5520_write(chip->client, reg, reg_val); in adp5520_clr_bits()
138 mutex_unlock(&chip->lock); in adp5520_clr_bits()
148 if (chip->irq) { in adp5520_register_notifier()
149 adp5520_set_bits(chip->dev, ADP5520_INTERRUPT_ENABLE, in adp5520_register_notifier()
153 return blocking_notifier_chain_register(&chip->notifier_list, in adp5520_register_notifier()
157 return -ENODEV; in adp5520_register_notifier()
166 adp5520_clr_bits(chip->dev, ADP5520_INTERRUPT_ENABLE, in adp5520_unregister_notifier()
170 return blocking_notifier_chain_unregister(&chip->notifier_list, nb); in adp5520_unregister_notifier()
181 ret = __adp5520_read(chip->client, ADP5520_MODE_STATUS, &reg_val); in adp5520_irq_thread()
188 blocking_notifier_call_chain(&chip->notifier_list, events, NULL); in adp5520_irq_thread()
190 __adp5520_ack_bits(chip->client, ADP5520_MODE_STATUS, events); in adp5520_irq_thread()
204 return device_for_each_child(chip->dev, NULL, __remove_subdev); in adp5520_remove_subdevs()
207 static int adp5520_probe(struct i2c_client *client, in adp5520_probe() argument
208 const struct i2c_device_id *id) in adp5520_probe() argument
210 struct adp5520_platform_data *pdata = dev_get_platdata(&client->dev); in adp5520_probe()
215 if (!i2c_check_functionality(client->adapter, in adp5520_probe()
217 dev_err(&client->dev, "SMBUS Word Data not Supported\n"); in adp5520_probe()
218 return -EIO; in adp5520_probe()
222 dev_err(&client->dev, "missing platform data\n"); in adp5520_probe()
223 return -ENODEV; in adp5520_probe()
226 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); in adp5520_probe()
228 return -ENOMEM; in adp5520_probe()
230 i2c_set_clientdata(client, chip); in adp5520_probe()
231 chip->client = client; in adp5520_probe()
233 chip->dev = &client->dev; in adp5520_probe()
234 chip->irq = client->irq; in adp5520_probe()
235 chip->id = id->driver_data; in adp5520_probe()
236 mutex_init(&chip->lock); in adp5520_probe()
238 if (chip->irq) { in adp5520_probe()
239 BLOCKING_INIT_NOTIFIER_HEAD(&chip->notifier_list); in adp5520_probe()
241 ret = request_threaded_irq(chip->irq, NULL, adp5520_irq_thread, in adp5520_probe()
245 dev_err(&client->dev, "failed to request irq %d\n", in adp5520_probe()
246 chip->irq); in adp5520_probe()
251 ret = adp5520_write(chip->dev, ADP5520_MODE_STATUS, ADP5520_nSTNBY); in adp5520_probe()
253 dev_err(&client->dev, "failed to write\n"); in adp5520_probe()
257 if (pdata->keys) { in adp5520_probe()
258 pdev = platform_device_register_data(chip->dev, "adp5520-keys", in adp5520_probe()
259 chip->id, pdata->keys, sizeof(*pdata->keys)); in adp5520_probe()
266 if (pdata->gpio) { in adp5520_probe()
267 pdev = platform_device_register_data(chip->dev, "adp5520-gpio", in adp5520_probe()
268 chip->id, pdata->gpio, sizeof(*pdata->gpio)); in adp5520_probe()
275 if (pdata->leds) { in adp5520_probe()
276 pdev = platform_device_register_data(chip->dev, "adp5520-led", in adp5520_probe()
277 chip->id, pdata->leds, sizeof(*pdata->leds)); in adp5520_probe()
284 if (pdata->backlight) { in adp5520_probe()
285 pdev = platform_device_register_data(chip->dev, in adp5520_probe()
286 "adp5520-backlight", in adp5520_probe()
287 chip->id, in adp5520_probe()
288 pdata->backlight, in adp5520_probe()
289 sizeof(*pdata->backlight)); in adp5520_probe()
302 if (chip->irq) in adp5520_probe()
303 free_irq(chip->irq, chip); in adp5520_probe()
311 struct i2c_client *client = to_i2c_client(dev); in adp5520_suspend() local
312 struct adp5520_chip *chip = dev_get_drvdata(&client->dev); in adp5520_suspend()
314 adp5520_read(chip->dev, ADP5520_MODE_STATUS, &chip->mode); in adp5520_suspend()
316 chip->mode &= ADP5520_BL_EN | ADP5520_DIM_EN | ADP5520_nSTNBY; in adp5520_suspend()
317 adp5520_write(chip->dev, ADP5520_MODE_STATUS, 0); in adp5520_suspend()
323 struct i2c_client *client = to_i2c_client(dev); in adp5520_resume() local
324 struct adp5520_chip *chip = dev_get_drvdata(&client->dev); in adp5520_resume()
326 adp5520_write(chip->dev, ADP5520_MODE_STATUS, chip->mode); in adp5520_resume()
334 { "pmic-adp5520", ID_ADP5520 },
335 { "pmic-adp5501", ID_ADP5501 },