From 26ea22923e15869db4e7a1bddd7f85f23307cad5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?N=C3=ADcolas=20F=2E=20R=2E=20A=2E=20Prado?=
 <nfraprado@collabora.com>
Date: Thu, 17 Jun 2021 12:08:00 -0300
Subject: [PATCH] HACK: Add spmi registers write through debugfs

Format is 'address,mask,value', all in hex. It uses the same file as the
read.
---
 drivers/leds/flash/leds-qcom-spmi-flash.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/leds/flash/leds-qcom-spmi-flash.c b/drivers/leds/flash/leds-qcom-spmi-flash.c
index 385a3de7eddb2..5819c010a073f 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)
-- 
GitLab