All of lore.kernel.org
 help / color / mirror / Atom feed
* [2/2] Input: melfas_mip4 - add fw_name sysfs attribute
@ 2016-10-21 10:49 Sangwon Jee
  2016-10-21 22:33 ` Dmitry Torokhov
  0 siblings, 1 reply; 2+ messages in thread
From: Sangwon Jee @ 2016-10-21 10:49 UTC (permalink / raw)
  To: dmitry.torokhov; +Cc: linux-input, jeesw

To support user firmware file name, add fw_name sysfs attribute 
and modify to use fw_name variable instead of predefined value.

Signed-off-by: Sangwon Jee <jeesw@melfas.com>
---
 drivers/input/touchscreen/melfas_mip4.c | 46 +++++++++++++++++++++++++++++++--
 1 file changed, 44 insertions(+), 2 deletions(-)

diff --git a/drivers/input/touchscreen/melfas_mip4.c b/drivers/input/touchscreen/melfas_mip4.c
index 8739cb7..ae9c428 100644
--- a/drivers/input/touchscreen/melfas_mip4.c
+++ b/drivers/input/touchscreen/melfas_mip4.c
@@ -162,6 +162,7 @@ struct mip4_ts {
 	char product_name[16];
 	u16 product_id;
 	char ic_name[4];
+	char *fw_name;
 
 	unsigned int max_x;
 	unsigned int max_y;
@@ -1285,11 +1286,11 @@ static ssize_t mip4_sysfs_fw_update(struct device *dev,
 	const struct firmware *fw;
 	int error;
 
-	error = request_firmware(&fw, MIP4_FW_NAME, dev);
+	error = request_firmware(&fw, ts->fw_name, dev);
 	if (error) {
 		dev_err(&ts->client->dev,
 			"Failed to retrieve firmware %s: %d\n",
-			MIP4_FW_NAME, error);
+			ts->fw_name, error);
 		return error;
 	}
 
@@ -1403,11 +1404,51 @@ static ssize_t mip4_sysfs_read_ic_name(struct device *dev,
 
 static DEVICE_ATTR(ic_name, S_IRUGO, mip4_sysfs_read_ic_name, NULL);
 
+static ssize_t mip4_sysfs_read_fw_name(struct device *dev,
+					  struct device_attribute *attr,
+					  char *buf)
+{
+	struct i2c_client *client = to_i2c_client(dev);
+	struct mip4_ts *ts = i2c_get_clientdata(client);
+	size_t count;
+
+	mutex_lock(&ts->input->mutex);
+
+	count = snprintf(buf, PAGE_SIZE, "%s\n", ts->fw_name);
+
+	mutex_unlock(&ts->input->mutex);
+
+	return count;
+}
+
+static ssize_t mip4_sysfs_write_fw_name(struct device *dev,
+					struct device_attribute *attr,
+					const char *buf,
+					size_t count)
+{
+	struct i2c_client *client = to_i2c_client(dev);
+	struct mip4_ts *ts = i2c_get_clientdata(client);
+	char *filename;
+
+	filename = devm_kzalloc(dev, count - 1, GFP_KERNEL);
+	memcpy(filename, buf, count - 1);
+
+	ts->fw_name = devm_kstrdup(dev, filename, GFP_KERNEL);
+
+	devm_kfree(dev, filename);
+
+	return count;
+}
+
+static DEVICE_ATTR(fw_name, S_IRUGO | S_IWUSR,
+			mip4_sysfs_read_fw_name, mip4_sysfs_write_fw_name);
+
 static struct attribute *mip4_attrs[] = {
 	&dev_attr_fw_version.attr,
 	&dev_attr_hw_version.attr,
 	&dev_attr_product_id.attr,
 	&dev_attr_ic_name.attr,
+	&dev_attr_fw_name.attr,
 	&dev_attr_update_fw.attr,
 	NULL,
 };
@@ -1444,6 +1485,7 @@ static int mip4_probe(struct i2c_client *client, const struct i2c_device_id *id)
 
 	ts->client = client;
 	ts->input = input;
+	ts->fw_name = devm_kstrdup(&client->dev, MIP4_FW_NAME, GFP_KERNEL);
 
 	snprintf(ts->phys, sizeof(ts->phys),
 		 "%s/input0", dev_name(&client->dev));
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [2/2] Input: melfas_mip4 - add fw_name sysfs attribute
  2016-10-21 10:49 [2/2] Input: melfas_mip4 - add fw_name sysfs attribute Sangwon Jee
@ 2016-10-21 22:33 ` Dmitry Torokhov
  0 siblings, 0 replies; 2+ messages in thread
From: Dmitry Torokhov @ 2016-10-21 22:33 UTC (permalink / raw)
  To: Sangwon Jee; +Cc: linux-input

On Fri, Oct 21, 2016 at 07:49:26PM +0900, Sangwon Jee wrote:
> To support user firmware file name, add fw_name sysfs attribute 
> and modify to use fw_name variable instead of predefined value.
> 

No, please have userspace adjust to whatever name kernel expects. If
there are concerns about multiple devices with incompatible firmware in
the system consider encoding product ID number in firmware name that
kernel requests.

Thanks.

> Signed-off-by: Sangwon Jee <jeesw@melfas.com>
> ---
>  drivers/input/touchscreen/melfas_mip4.c | 46 +++++++++++++++++++++++++++++++--
>  1 file changed, 44 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/input/touchscreen/melfas_mip4.c b/drivers/input/touchscreen/melfas_mip4.c
> index 8739cb7..ae9c428 100644
> --- a/drivers/input/touchscreen/melfas_mip4.c
> +++ b/drivers/input/touchscreen/melfas_mip4.c
> @@ -162,6 +162,7 @@ struct mip4_ts {
>  	char product_name[16];
>  	u16 product_id;
>  	char ic_name[4];
> +	char *fw_name;
>  
>  	unsigned int max_x;
>  	unsigned int max_y;
> @@ -1285,11 +1286,11 @@ static ssize_t mip4_sysfs_fw_update(struct device *dev,
>  	const struct firmware *fw;
>  	int error;
>  
> -	error = request_firmware(&fw, MIP4_FW_NAME, dev);
> +	error = request_firmware(&fw, ts->fw_name, dev);
>  	if (error) {
>  		dev_err(&ts->client->dev,
>  			"Failed to retrieve firmware %s: %d\n",
> -			MIP4_FW_NAME, error);
> +			ts->fw_name, error);
>  		return error;
>  	}
>  
> @@ -1403,11 +1404,51 @@ static ssize_t mip4_sysfs_read_ic_name(struct device *dev,
>  
>  static DEVICE_ATTR(ic_name, S_IRUGO, mip4_sysfs_read_ic_name, NULL);
>  
> +static ssize_t mip4_sysfs_read_fw_name(struct device *dev,
> +					  struct device_attribute *attr,
> +					  char *buf)
> +{
> +	struct i2c_client *client = to_i2c_client(dev);
> +	struct mip4_ts *ts = i2c_get_clientdata(client);
> +	size_t count;
> +
> +	mutex_lock(&ts->input->mutex);
> +
> +	count = snprintf(buf, PAGE_SIZE, "%s\n", ts->fw_name);
> +
> +	mutex_unlock(&ts->input->mutex);
> +
> +	return count;
> +}
> +
> +static ssize_t mip4_sysfs_write_fw_name(struct device *dev,
> +					struct device_attribute *attr,
> +					const char *buf,
> +					size_t count)
> +{
> +	struct i2c_client *client = to_i2c_client(dev);
> +	struct mip4_ts *ts = i2c_get_clientdata(client);
> +	char *filename;
> +
> +	filename = devm_kzalloc(dev, count - 1, GFP_KERNEL);
> +	memcpy(filename, buf, count - 1);
> +
> +	ts->fw_name = devm_kstrdup(dev, filename, GFP_KERNEL);
> +
> +	devm_kfree(dev, filename);
> +
> +	return count;
> +}
> +
> +static DEVICE_ATTR(fw_name, S_IRUGO | S_IWUSR,
> +			mip4_sysfs_read_fw_name, mip4_sysfs_write_fw_name);
> +
>  static struct attribute *mip4_attrs[] = {
>  	&dev_attr_fw_version.attr,
>  	&dev_attr_hw_version.attr,
>  	&dev_attr_product_id.attr,
>  	&dev_attr_ic_name.attr,
> +	&dev_attr_fw_name.attr,
>  	&dev_attr_update_fw.attr,
>  	NULL,
>  };
> @@ -1444,6 +1485,7 @@ static int mip4_probe(struct i2c_client *client, const struct i2c_device_id *id)
>  
>  	ts->client = client;
>  	ts->input = input;
> +	ts->fw_name = devm_kstrdup(&client->dev, MIP4_FW_NAME, GFP_KERNEL);
>  
>  	snprintf(ts->phys, sizeof(ts->phys),
>  		 "%s/input0", dev_name(&client->dev));
> -- 
> 1.9.1
> 

-- 
Dmitry

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-10-21 22:33 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-21 10:49 [2/2] Input: melfas_mip4 - add fw_name sysfs attribute Sangwon Jee
2016-10-21 22:33 ` Dmitry Torokhov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.