Lines Matching refs:aat2870

106 static int __aat2870_read(struct aat2870_data *aat2870, u8 addr, u8 *val)  in __aat2870_read()  argument
111 dev_err(aat2870->dev, "Invalid address, 0x%02x\n", addr); in __aat2870_read()
115 if (!aat2870->reg_cache[addr].readable) { in __aat2870_read()
116 *val = aat2870->reg_cache[addr].value; in __aat2870_read()
120 ret = i2c_master_send(aat2870->client, &addr, 1); in __aat2870_read()
126 ret = i2c_master_recv(aat2870->client, val, 1); in __aat2870_read()
133 dev_dbg(aat2870->dev, "read: addr=0x%02x, val=0x%02x\n", addr, *val); in __aat2870_read()
137 static int __aat2870_write(struct aat2870_data *aat2870, u8 addr, u8 val) in __aat2870_write() argument
143 dev_err(aat2870->dev, "Invalid address, 0x%02x\n", addr); in __aat2870_write()
147 if (!aat2870->reg_cache[addr].writeable) { in __aat2870_write()
148 dev_err(aat2870->dev, "Address 0x%02x is not writeable\n", in __aat2870_write()
155 ret = i2c_master_send(aat2870->client, msg, 2); in __aat2870_write()
161 aat2870->reg_cache[addr].value = val; in __aat2870_write()
163 dev_dbg(aat2870->dev, "write: addr=0x%02x, val=0x%02x\n", addr, val); in __aat2870_write()
167 static int aat2870_read(struct aat2870_data *aat2870, u8 addr, u8 *val) in aat2870_read() argument
171 mutex_lock(&aat2870->io_lock); in aat2870_read()
172 ret = __aat2870_read(aat2870, addr, val); in aat2870_read()
173 mutex_unlock(&aat2870->io_lock); in aat2870_read()
178 static int aat2870_write(struct aat2870_data *aat2870, u8 addr, u8 val) in aat2870_write() argument
182 mutex_lock(&aat2870->io_lock); in aat2870_write()
183 ret = __aat2870_write(aat2870, addr, val); in aat2870_write()
184 mutex_unlock(&aat2870->io_lock); in aat2870_write()
189 static int aat2870_update(struct aat2870_data *aat2870, u8 addr, u8 mask, in aat2870_update() argument
196 mutex_lock(&aat2870->io_lock); in aat2870_update()
198 ret = __aat2870_read(aat2870, addr, &old_val); in aat2870_update()
205 ret = __aat2870_write(aat2870, addr, new_val); in aat2870_update()
208 mutex_unlock(&aat2870->io_lock); in aat2870_update()
213 static inline void aat2870_enable(struct aat2870_data *aat2870) in aat2870_enable() argument
215 if (aat2870->en_pin >= 0) in aat2870_enable()
216 gpio_set_value(aat2870->en_pin, 1); in aat2870_enable()
218 aat2870->is_enable = 1; in aat2870_enable()
221 static inline void aat2870_disable(struct aat2870_data *aat2870) in aat2870_disable() argument
223 if (aat2870->en_pin >= 0) in aat2870_disable()
224 gpio_set_value(aat2870->en_pin, 0); in aat2870_disable()
226 aat2870->is_enable = 0; in aat2870_disable()
230 static ssize_t aat2870_dump_reg(struct aat2870_data *aat2870, char *buf) in aat2870_dump_reg() argument
242 ret = aat2870->read(aat2870, addr, &val); in aat2870_dump_reg()
268 struct aat2870_data *aat2870 = file->private_data; in aat2870_reg_read_file() local
276 ret = aat2870_dump_reg(aat2870, buf); in aat2870_reg_read_file()
289 struct aat2870_data *aat2870 = file->private_data; in aat2870_reg_write_file() local
298 dev_err(aat2870->dev, "Failed to copy from user\n"); in aat2870_reg_write_file()
311 dev_err(aat2870->dev, "Invalid address, 0x%lx\n", addr); in aat2870_reg_write_file()
322 ret = aat2870->write(aat2870, (u8)addr, (u8)val); in aat2870_reg_write_file()
335 static void aat2870_init_debugfs(struct aat2870_data *aat2870) in aat2870_init_debugfs() argument
337 aat2870->dentry_root = debugfs_create_dir("aat2870", NULL); in aat2870_init_debugfs()
338 if (!aat2870->dentry_root) { in aat2870_init_debugfs()
339 dev_warn(aat2870->dev, in aat2870_init_debugfs()
344 aat2870->dentry_reg = debugfs_create_file("regs", 0644, in aat2870_init_debugfs()
345 aat2870->dentry_root, in aat2870_init_debugfs()
346 aat2870, &aat2870_reg_fops); in aat2870_init_debugfs()
347 if (!aat2870->dentry_reg) in aat2870_init_debugfs()
348 dev_warn(aat2870->dev, in aat2870_init_debugfs()
352 static void aat2870_uninit_debugfs(struct aat2870_data *aat2870) in aat2870_uninit_debugfs() argument
354 debugfs_remove_recursive(aat2870->dentry_root); in aat2870_uninit_debugfs()
357 static inline void aat2870_init_debugfs(struct aat2870_data *aat2870) in aat2870_init_debugfs() argument
361 static inline void aat2870_uninit_debugfs(struct aat2870_data *aat2870) in aat2870_uninit_debugfs() argument
370 struct aat2870_data *aat2870; in aat2870_i2c_probe() local
374 aat2870 = devm_kzalloc(&client->dev, sizeof(struct aat2870_data), in aat2870_i2c_probe()
376 if (!aat2870) { in aat2870_i2c_probe()
382 aat2870->dev = &client->dev; in aat2870_i2c_probe()
383 dev_set_drvdata(aat2870->dev, aat2870); in aat2870_i2c_probe()
385 aat2870->client = client; in aat2870_i2c_probe()
386 i2c_set_clientdata(client, aat2870); in aat2870_i2c_probe()
388 aat2870->reg_cache = aat2870_regs; in aat2870_i2c_probe()
391 aat2870->en_pin = -1; in aat2870_i2c_probe()
393 aat2870->en_pin = pdata->en_pin; in aat2870_i2c_probe()
395 aat2870->init = pdata->init; in aat2870_i2c_probe()
396 aat2870->uninit = pdata->uninit; in aat2870_i2c_probe()
397 aat2870->read = aat2870_read; in aat2870_i2c_probe()
398 aat2870->write = aat2870_write; in aat2870_i2c_probe()
399 aat2870->update = aat2870_update; in aat2870_i2c_probe()
401 mutex_init(&aat2870->io_lock); in aat2870_i2c_probe()
403 if (aat2870->init) in aat2870_i2c_probe()
404 aat2870->init(aat2870); in aat2870_i2c_probe()
406 if (aat2870->en_pin >= 0) { in aat2870_i2c_probe()
407 ret = devm_gpio_request_one(&client->dev, aat2870->en_pin, in aat2870_i2c_probe()
411 "Failed to request GPIO %d\n", aat2870->en_pin); in aat2870_i2c_probe()
416 aat2870_enable(aat2870); in aat2870_i2c_probe()
430 ret = mfd_add_devices(aat2870->dev, 0, aat2870_devs, in aat2870_i2c_probe()
433 dev_err(aat2870->dev, "Failed to add subdev: %d\n", ret); in aat2870_i2c_probe()
437 aat2870_init_debugfs(aat2870); in aat2870_i2c_probe()
442 aat2870_disable(aat2870); in aat2870_i2c_probe()
448 struct aat2870_data *aat2870 = i2c_get_clientdata(client); in aat2870_i2c_remove() local
450 aat2870_uninit_debugfs(aat2870); in aat2870_i2c_remove()
452 mfd_remove_devices(aat2870->dev); in aat2870_i2c_remove()
453 aat2870_disable(aat2870); in aat2870_i2c_remove()
454 if (aat2870->uninit) in aat2870_i2c_remove()
455 aat2870->uninit(aat2870); in aat2870_i2c_remove()
464 struct aat2870_data *aat2870 = i2c_get_clientdata(client); in aat2870_i2c_suspend() local
466 aat2870_disable(aat2870); in aat2870_i2c_suspend()
474 struct aat2870_data *aat2870 = i2c_get_clientdata(client); in aat2870_i2c_resume() local
478 aat2870_enable(aat2870); in aat2870_i2c_resume()
482 reg = &aat2870->reg_cache[i]; in aat2870_i2c_resume()
484 aat2870->write(aat2870, i, reg->value); in aat2870_i2c_resume()