i2c: mux: demux-pinctrl: Clean up sysfs attributes
PATCH 1/1 i2c: mux: demux-pinctrl: Clean up sysfs attributes
sysfs attributes should use the same format for reads and writes, rather than pretty-printing on read.
* Make the "cur_master" attribute read back as just the name of the master
* Expose the list of all masters as a read-only "available_masters" attribute, using space separators as in similar attributes of other devices
Also, spell out "cur_master" in full as "current_master".
--- drivers/i2c/muxes/i2c-demux-pinctrl.c | 39 ++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 10 deletions(-)
drivers/i2c/muxes/i2c-demux-pinctrl.c +29 -10
@@ -140,22 +140,34 @@ static int i2c_demux_change_master(struct i2c_demux_pinctrl_priv *priv, u32 new_return i2c_demux_activate_master (priv, new_chan); } -static ssize_t cur_master_show (struct device *dev,struct device_attribute *attr, -char *buf) +static ssize_t available_masters_show (struct device *dev, +struct device_attribute *attr, +char *buf) {struct i2c_demux_pinctrl_priv *priv =dev_get_drvdata (dev);int count =0 , i;for (i =0 ; i < priv->num_chan && count <PAGE_SIZE ; i++) - count +=scnprintf (buf + count,PAGE_SIZE - count,"%c %d - %s\n" , - i == priv->cur_chan ?'*' :' ' , i, - priv->chan[i].parent_np->full_name); + count +=scnprintf (buf + count,PAGE_SIZE - count,"%d:%s%c" , + i, priv->chan[i].parent_np->full_name, + i == priv->num_chan -1 ?'\n' :' ' );return count; } +static DEVICE_ATTR_RO (available_masters); -static ssize_t cur_master_store (struct device *dev,struct device_attribute *attr, -const char *buf,size_t count) +static ssize_t current_master_show (struct device *dev, +struct device_attribute *attr, +char *buf) +{ +struct i2c_demux_pinctrl_priv *priv =dev_get_drvdata (dev); + +return sprintf (buf,"%d\n" , priv->cur_chan); +} + +static ssize_t current_master_store (struct device *dev, +struct device_attribute *attr, +const char *buf,size_t count) {struct i2c_demux_pinctrl_priv *priv =dev_get_drvdata (dev);unsigned int val;
@@ -172,7 +184,7 @@ static ssize_t cur_master_store(struct device *dev, struct device_attribute *attreturn ret <0 ? ret : count; } -static DEVICE_ATTR_RW (cur_master); +static DEVICE_ATTR_RW (current_master);static int i2c_demux_pinctrl_probe (struct platform_device *pdev) {
@@ -218,12 +230,18 @@ static int i2c_demux_pinctrl_probe(struct platform_device *pdev)/* switch to first parent as active master */ i2c_demux_activate_master (priv,0 ); - err =device_create_file (&pdev->dev, &dev_attr_cur_master); + err =device_create_file (&pdev->dev, &dev_attr_available_masters);if (err) goto err_rollback; + err =device_create_file (&pdev->dev, &dev_attr_current_master); +if (err) + goto err_rollback_available; +return 0 ; +err_rollback_available: +device_remove_file (&pdev->dev, &dev_attr_available_masters); err_rollback:for (j =0 ; j < i; j++) {of_node_put (priv->chan[j].parent_np);
@@ -238,7 +256,8 @@ static int i2c_demux_pinctrl_remove(struct platform_device *pdev)struct i2c_demux_pinctrl_priv *priv =platform_get_drvdata (pdev);int i; -device_remove_file (&pdev->dev, &dev_attr_cur_master); +device_remove_file (&pdev->dev, &dev_attr_current_master); +device_remove_file (&pdev->dev, &dev_attr_available_masters);i2c_demux_deactivate_master (priv);
Signature · 2 lines
Ben Hutchings Software Developer, Codethink Ltd.
Wolfram Sang
AppliedQuoted 9 lines · Ben Hutchings
sysfs attributes should use the same format for reads and writes, rather than pretty-printing on read.
* Make the "
cur_master" attribute read back as just the name of the master
* Expose the list of all masters as a read-only "available_masters" attribute, using space separators as in similar attributes of other devices
Quoted 5 lines
Also, spell out "
cur_master" in full as "current_master".Fixes 50a5ba876908 ("i2c: mux: demux-pinctrl: add driver")Cc Wolfram Sang <[email protected]>Signed-off-by Ben Hutchings <[email protected]>
Applied to for-current, thanks!