Message ID | 20230802160748.11208-2-kabel@kernel.org |
---|---|
State | New |
Headers | show |
Series | leds: turris-omnia: updates | expand |
On Wed, 02 Aug 2023, Marek Behún wrote: > Do not lock driver mutex in the global LED panel brightness sysfs > accessors brightness_show() and brightness_store(). > > The mutex locking is unnecessary here. The I2C transfers are guarded by > I2C core locking mechanism, and the LED commands itself do not interfere > with other commands. > > Fixes: 089381b27abe ("leds: initial support for Turris Omnia LEDs") > Signed-off-by: Marek Behún <kabel@kernel.org> > --- > drivers/leds/leds-turris-omnia.c | 11 +---------- > 1 file changed, 1 insertion(+), 10 deletions(-) Reviewed-by: Lee Jones <lee@kernel.org>
On Wed, 02 Aug 2023 18:07:43 +0200, Marek Behún wrote: > Do not lock driver mutex in the global LED panel brightness sysfs > accessors brightness_show() and brightness_store(). > > The mutex locking is unnecessary here. The I2C transfers are guarded by > I2C core locking mechanism, and the LED commands itself do not interfere > with other commands. > > [...] Applied, thanks! [1/6] leds: turris-omnia: drop unnecessary mutex locking commit: 760b6b7925bf09491aafa4727eef74fc6bf738b0 -- Lee Jones [李琼斯]
diff --git a/drivers/leds/leds-turris-omnia.c b/drivers/leds/leds-turris-omnia.c index 64b2d7b6d3f3..bbd610100e41 100644 --- a/drivers/leds/leds-turris-omnia.c +++ b/drivers/leds/leds-turris-omnia.c @@ -156,12 +156,9 @@ static ssize_t brightness_show(struct device *dev, struct device_attribute *a, char *buf) { struct i2c_client *client = to_i2c_client(dev); - struct omnia_leds *leds = i2c_get_clientdata(client); int ret; - mutex_lock(&leds->lock); ret = i2c_smbus_read_byte_data(client, CMD_LED_GET_BRIGHTNESS); - mutex_unlock(&leds->lock); if (ret < 0) return ret; @@ -173,7 +170,6 @@ static ssize_t brightness_store(struct device *dev, struct device_attribute *a, const char *buf, size_t count) { struct i2c_client *client = to_i2c_client(dev); - struct omnia_leds *leds = i2c_get_clientdata(client); unsigned long brightness; int ret; @@ -183,15 +179,10 @@ static ssize_t brightness_store(struct device *dev, struct device_attribute *a, if (brightness > 100) return -EINVAL; - mutex_lock(&leds->lock); ret = i2c_smbus_write_byte_data(client, CMD_LED_SET_BRIGHTNESS, (u8)brightness); - mutex_unlock(&leds->lock); - - if (ret < 0) - return ret; - return count; + return ret < 0 ? ret : count; } static DEVICE_ATTR_RW(brightness);
Do not lock driver mutex in the global LED panel brightness sysfs accessors brightness_show() and brightness_store(). The mutex locking is unnecessary here. The I2C transfers are guarded by I2C core locking mechanism, and the LED commands itself do not interfere with other commands. Fixes: 089381b27abe ("leds: initial support for Turris Omnia LEDs") Signed-off-by: Marek Behún <kabel@kernel.org> --- drivers/leds/leds-turris-omnia.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-)