diff --git a/drivers/leds/flash/leds-qcom-spmi-flash.c b/drivers/leds/flash/leds-qcom-spmi-flash.c index 385a3de7eddb289c0547ad3096244d89b1b90024..5819c010a073f042ec0d625c206e1eccf3366f65 100644 --- a/drivers/leds/flash/leds-qcom-spmi-flash.c +++ b/drivers/leds/flash/leds-qcom-spmi-flash.c @@ -271,9 +271,30 @@ ssize_t debugfs_spmi_regs_read(struct file *file, char __user *buf, size_t size, return simple_read_from_buffer(buf, size, ppos, my_buf, total); } +ssize_t debugfs_spmi_regs_write(struct file *file, const char __user *buf, + size_t size, loff_t *ppos) +{ + const int SIZE = 20; + char my_buf[SIZE]; + ssize_t len = simple_write_to_buffer(my_buf, PAGE_SIZE, ppos, buf, size); + unsigned int addr, mask, val; + int rc; + + rc = sscanf(my_buf, "%x,%x,%x", &addr, &mask, &val); + if (rc < 3) + return -EINVAL; + + mutex_lock(&debugfs_leds_dev->lock); + qcom_flash_masked_write(debugfs_leds_dev, addr, mask, val); + mutex_unlock(&debugfs_leds_dev->lock); + + return len; +} + static struct dentry *debugfs_dir; const struct file_operations debugfs_spmi_regs_fops = { .read = debugfs_spmi_regs_read, + .write = debugfs_spmi_regs_write, }; static u8 qcom_flash_duration_to_reg(u32 us)