Lines Matching defs:aat2870
3 * linux/drivers/mfd/aat2870-core.c
18 #include <linux/mfd/aat2870.h>
66 .name = "aat2870-backlight",
71 .name = "aat2870-regulator",
76 .name = "aat2870-regulator",
81 .name = "aat2870-regulator",
86 .name = "aat2870-regulator",
92 static int __aat2870_read(struct aat2870_data *aat2870, u8 addr, u8 *val)
97 dev_err(aat2870->dev, "Invalid address, 0x%02x\n", addr);
101 if (!aat2870->reg_cache[addr].readable) {
102 *val = aat2870->reg_cache[addr].value;
106 ret = i2c_master_send(aat2870->client, &addr, 1);
112 ret = i2c_master_recv(aat2870->client, val, 1);
119 dev_dbg(aat2870->dev, "read: addr=0x%02x, val=0x%02x\n", addr, *val);
123 static int __aat2870_write(struct aat2870_data *aat2870, u8 addr, u8 val)
129 dev_err(aat2870->dev, "Invalid address, 0x%02x\n", addr);
133 if (!aat2870->reg_cache[addr].writeable) {
134 dev_err(aat2870->dev, "Address 0x%02x is not writeable\n",
141 ret = i2c_master_send(aat2870->client, msg, 2);
147 aat2870->reg_cache[addr].value = val;
149 dev_dbg(aat2870->dev, "write: addr=0x%02x, val=0x%02x\n", addr, val);
153 static int aat2870_read(struct aat2870_data *aat2870, u8 addr, u8 *val)
157 mutex_lock(&aat2870->io_lock);
158 ret = __aat2870_read(aat2870, addr, val);
159 mutex_unlock(&aat2870->io_lock);
164 static int aat2870_write(struct aat2870_data *aat2870, u8 addr, u8 val)
168 mutex_lock(&aat2870->io_lock);
169 ret = __aat2870_write(aat2870, addr, val);
170 mutex_unlock(&aat2870->io_lock);
175 static int aat2870_update(struct aat2870_data *aat2870, u8 addr, u8 mask,
182 mutex_lock(&aat2870->io_lock);
184 ret = __aat2870_read(aat2870, addr, &old_val);
191 ret = __aat2870_write(aat2870, addr, new_val);
194 mutex_unlock(&aat2870->io_lock);
199 static inline void aat2870_enable(struct aat2870_data *aat2870)
201 if (aat2870->en_pin >= 0)
202 gpio_set_value(aat2870->en_pin, 1);
204 aat2870->is_enable = 1;
207 static inline void aat2870_disable(struct aat2870_data *aat2870)
209 if (aat2870->en_pin >= 0)
210 gpio_set_value(aat2870->en_pin, 0);
212 aat2870->is_enable = 0;
216 static ssize_t aat2870_dump_reg(struct aat2870_data *aat2870, char *buf)
222 count += sprintf(buf, "aat2870 registers\n");
228 ret = aat2870->read(aat2870, addr, &val);
254 struct aat2870_data *aat2870 = file->private_data;
262 ret = aat2870_dump_reg(aat2870, buf);
275 struct aat2870_data *aat2870 = file->private_data;
284 dev_err(aat2870->dev, "Failed to copy from user\n");
297 dev_err(aat2870->dev, "Invalid address, 0x%lx\n", addr);
308 ret = aat2870->write(aat2870, (u8)addr, (u8)val);
321 static void aat2870_init_debugfs(struct aat2870_data *aat2870)
323 aat2870->dentry_root = debugfs_create_dir("aat2870", NULL);
325 debugfs_create_file("regs", 0644, aat2870->dentry_root, aat2870,
330 static inline void aat2870_init_debugfs(struct aat2870_data *aat2870)
338 struct aat2870_data *aat2870;
342 aat2870 = devm_kzalloc(&client->dev, sizeof(struct aat2870_data),
344 if (!aat2870)
347 aat2870->dev = &client->dev;
348 aat2870->client = client;
349 i2c_set_clientdata(client, aat2870);
351 aat2870->reg_cache = aat2870_regs;
354 aat2870->en_pin = -1;
356 aat2870->en_pin = pdata->en_pin;
358 aat2870->init = pdata->init;
359 aat2870->uninit = pdata->uninit;
360 aat2870->read = aat2870_read;
361 aat2870->write = aat2870_write;
362 aat2870->update = aat2870_update;
364 mutex_init(&aat2870->io_lock);
366 if (aat2870->init)
367 aat2870->init(aat2870);
369 if (aat2870->en_pin >= 0) {
370 ret = devm_gpio_request_one(&client->dev, aat2870->en_pin,
371 GPIOF_OUT_INIT_HIGH, "aat2870-en");
374 "Failed to request GPIO %d\n", aat2870->en_pin);
379 aat2870_enable(aat2870);
393 ret = mfd_add_devices(aat2870->dev, 0, aat2870_devs,
396 dev_err(aat2870->dev, "Failed to add subdev: %d\n", ret);
400 aat2870_init_debugfs(aat2870);
405 aat2870_disable(aat2870);
412 struct aat2870_data *aat2870 = i2c_get_clientdata(client);
414 aat2870_disable(aat2870);
422 struct aat2870_data *aat2870 = i2c_get_clientdata(client);
426 aat2870_enable(aat2870);
430 reg = &aat2870->reg_cache[i];
432 aat2870->write(aat2870, i, reg->value);
442 { "aat2870", 0 },
448 .name = "aat2870",