Lines Matching refs:aat2870

92 static int __aat2870_read(struct aat2870_data *aat2870, u8 addr, u8 *val)  in __aat2870_read()  argument
97 dev_err(aat2870->dev, "Invalid address, 0x%02x\n", addr); in __aat2870_read()
101 if (!aat2870->reg_cache[addr].readable) { in __aat2870_read()
102 *val = aat2870->reg_cache[addr].value; in __aat2870_read()
106 ret = i2c_master_send(aat2870->client, &addr, 1); in __aat2870_read()
112 ret = i2c_master_recv(aat2870->client, val, 1); in __aat2870_read()
119 dev_dbg(aat2870->dev, "read: addr=0x%02x, val=0x%02x\n", addr, *val); in __aat2870_read()
123 static int __aat2870_write(struct aat2870_data *aat2870, u8 addr, u8 val) in __aat2870_write() argument
129 dev_err(aat2870->dev, "Invalid address, 0x%02x\n", addr); in __aat2870_write()
133 if (!aat2870->reg_cache[addr].writeable) { in __aat2870_write()
134 dev_err(aat2870->dev, "Address 0x%02x is not writeable\n", in __aat2870_write()
141 ret = i2c_master_send(aat2870->client, msg, 2); in __aat2870_write()
147 aat2870->reg_cache[addr].value = val; in __aat2870_write()
149 dev_dbg(aat2870->dev, "write: addr=0x%02x, val=0x%02x\n", addr, val); in __aat2870_write()
153 static int aat2870_read(struct aat2870_data *aat2870, u8 addr, u8 *val) in aat2870_read() argument
157 mutex_lock(&aat2870->io_lock); in aat2870_read()
158 ret = __aat2870_read(aat2870, addr, val); in aat2870_read()
159 mutex_unlock(&aat2870->io_lock); in aat2870_read()
164 static int aat2870_write(struct aat2870_data *aat2870, u8 addr, u8 val) in aat2870_write() argument
168 mutex_lock(&aat2870->io_lock); in aat2870_write()
169 ret = __aat2870_write(aat2870, addr, val); in aat2870_write()
170 mutex_unlock(&aat2870->io_lock); in aat2870_write()
175 static int aat2870_update(struct aat2870_data *aat2870, u8 addr, u8 mask, in aat2870_update() argument
182 mutex_lock(&aat2870->io_lock); in aat2870_update()
184 ret = __aat2870_read(aat2870, addr, &old_val); in aat2870_update()
191 ret = __aat2870_write(aat2870, addr, new_val); in aat2870_update()
194 mutex_unlock(&aat2870->io_lock); in aat2870_update()
199 static inline void aat2870_enable(struct aat2870_data *aat2870) in aat2870_enable() argument
201 if (aat2870->en_pin >= 0) in aat2870_enable()
202 gpio_set_value(aat2870->en_pin, 1); in aat2870_enable()
204 aat2870->is_enable = 1; in aat2870_enable()
207 static inline void aat2870_disable(struct aat2870_data *aat2870) in aat2870_disable() argument
209 if (aat2870->en_pin >= 0) in aat2870_disable()
210 gpio_set_value(aat2870->en_pin, 0); in aat2870_disable()
212 aat2870->is_enable = 0; in aat2870_disable()
216 static ssize_t aat2870_dump_reg(struct aat2870_data *aat2870, char *buf) in aat2870_dump_reg() argument
228 ret = aat2870->read(aat2870, addr, &val); in aat2870_dump_reg()
254 struct aat2870_data *aat2870 = file->private_data; in aat2870_reg_read_file() local
262 ret = aat2870_dump_reg(aat2870, buf); in aat2870_reg_read_file()
275 struct aat2870_data *aat2870 = file->private_data; in aat2870_reg_write_file() local
284 dev_err(aat2870->dev, "Failed to copy from user\n"); in aat2870_reg_write_file()
297 dev_err(aat2870->dev, "Invalid address, 0x%lx\n", addr); in aat2870_reg_write_file()
308 ret = aat2870->write(aat2870, (u8)addr, (u8)val); in aat2870_reg_write_file()
321 static void aat2870_init_debugfs(struct aat2870_data *aat2870) in aat2870_init_debugfs() argument
323 aat2870->dentry_root = debugfs_create_dir("aat2870", NULL); in aat2870_init_debugfs()
325 debugfs_create_file("regs", 0644, aat2870->dentry_root, aat2870, in aat2870_init_debugfs()
330 static inline void aat2870_init_debugfs(struct aat2870_data *aat2870) in aat2870_init_debugfs() argument
339 struct aat2870_data *aat2870; in aat2870_i2c_probe() local
343 aat2870 = devm_kzalloc(&client->dev, sizeof(struct aat2870_data), in aat2870_i2c_probe()
345 if (!aat2870) in aat2870_i2c_probe()
348 aat2870->dev = &client->dev; in aat2870_i2c_probe()
349 dev_set_drvdata(aat2870->dev, aat2870); in aat2870_i2c_probe()
351 aat2870->client = client; in aat2870_i2c_probe()
352 i2c_set_clientdata(client, aat2870); in aat2870_i2c_probe()
354 aat2870->reg_cache = aat2870_regs; in aat2870_i2c_probe()
357 aat2870->en_pin = -1; in aat2870_i2c_probe()
359 aat2870->en_pin = pdata->en_pin; in aat2870_i2c_probe()
361 aat2870->init = pdata->init; in aat2870_i2c_probe()
362 aat2870->uninit = pdata->uninit; in aat2870_i2c_probe()
363 aat2870->read = aat2870_read; in aat2870_i2c_probe()
364 aat2870->write = aat2870_write; in aat2870_i2c_probe()
365 aat2870->update = aat2870_update; in aat2870_i2c_probe()
367 mutex_init(&aat2870->io_lock); in aat2870_i2c_probe()
369 if (aat2870->init) in aat2870_i2c_probe()
370 aat2870->init(aat2870); in aat2870_i2c_probe()
372 if (aat2870->en_pin >= 0) { in aat2870_i2c_probe()
373 ret = devm_gpio_request_one(&client->dev, aat2870->en_pin, in aat2870_i2c_probe()
377 "Failed to request GPIO %d\n", aat2870->en_pin); in aat2870_i2c_probe()
382 aat2870_enable(aat2870); in aat2870_i2c_probe()
396 ret = mfd_add_devices(aat2870->dev, 0, aat2870_devs, in aat2870_i2c_probe()
399 dev_err(aat2870->dev, "Failed to add subdev: %d\n", ret); in aat2870_i2c_probe()
403 aat2870_init_debugfs(aat2870); in aat2870_i2c_probe()
408 aat2870_disable(aat2870); in aat2870_i2c_probe()
416 struct aat2870_data *aat2870 = i2c_get_clientdata(client); in aat2870_i2c_suspend() local
418 aat2870_disable(aat2870); in aat2870_i2c_suspend()
426 struct aat2870_data *aat2870 = i2c_get_clientdata(client); in aat2870_i2c_resume() local
430 aat2870_enable(aat2870); in aat2870_i2c_resume()
434 reg = &aat2870->reg_cache[i]; in aat2870_i2c_resume()
436 aat2870->write(aat2870, i, reg->value); in aat2870_i2c_resume()