Loading drivers/input/misc/ims-pcu.c +62 −73 Original line number Diff line number Diff line Loading @@ -927,9 +927,8 @@ static void ims_pcu_process_async_firmware(const struct firmware *fw, goto out; } mutex_lock(&pcu->cmd_mutex); scoped_guard(mutex, &pcu->cmd_mutex) ims_pcu_handle_firmware_update(pcu, fw); mutex_unlock(&pcu->cmd_mutex); release_firmware(fw); Loading @@ -953,7 +952,7 @@ static int ims_pcu_backlight_set_brightness(struct led_classdev *cdev, __le16 br_val = cpu_to_le16(value); int error; mutex_lock(&pcu->cmd_mutex); guard(mutex)(&pcu->cmd_mutex); error = ims_pcu_execute_command(pcu, SET_BRIGHTNESS, &br_val, sizeof(br_val)); Loading @@ -962,8 +961,6 @@ static int ims_pcu_backlight_set_brightness(struct led_classdev *cdev, "Failed to set desired brightness %u, error: %d\n", value, error); mutex_unlock(&pcu->cmd_mutex); return error; } Loading @@ -977,7 +974,7 @@ ims_pcu_backlight_get_brightness(struct led_classdev *cdev) int brightness; int error; mutex_lock(&pcu->cmd_mutex); guard(mutex)(&pcu->cmd_mutex); error = ims_pcu_execute_query(pcu, GET_BRIGHTNESS); if (error) { Loading @@ -991,8 +988,6 @@ ims_pcu_backlight_get_brightness(struct led_classdev *cdev) get_unaligned_le16(&pcu->cmd_buf[IMS_PCU_DATA_OFFSET]); } mutex_unlock(&pcu->cmd_mutex); return brightness; } Loading Loading @@ -1072,10 +1067,7 @@ static ssize_t ims_pcu_attribute_store(struct device *dev, if (data_len > attr->field_length) return -EINVAL; error = mutex_lock_interruptible(&pcu->cmd_mutex); if (error) return error; scoped_cond_guard(mutex, return -EINTR, &pcu->cmd_mutex) { memset(field, 0, attr->field_length); memcpy(field, buf, data_len); Loading @@ -1087,9 +1079,11 @@ static ssize_t ims_pcu_attribute_store(struct device *dev, */ ims_pcu_get_info(pcu); mutex_unlock(&pcu->cmd_mutex); if (error) return error; } return error < 0 ? error : count; return count; } #define IMS_PCU_ATTR(_field, _mode) \ Loading Loading @@ -1152,7 +1146,6 @@ static ssize_t ims_pcu_update_firmware_store(struct device *dev, { struct usb_interface *intf = to_usb_interface(dev); struct ims_pcu *pcu = usb_get_intfdata(intf); const struct firmware *fw = NULL; int value; int error; Loading @@ -1163,17 +1156,15 @@ static ssize_t ims_pcu_update_firmware_store(struct device *dev, if (value != 1) return -EINVAL; error = mutex_lock_interruptible(&pcu->cmd_mutex); if (error) return error; const struct firmware *fw __free(firmware) = NULL; error = request_ihex_firmware(&fw, IMS_PCU_FIRMWARE_NAME, pcu->dev); if (error) { dev_err(pcu->dev, "Failed to request firmware %s, error: %d\n", IMS_PCU_FIRMWARE_NAME, error); goto out; return error; } scoped_cond_guard(mutex_intr, return -EINTR, &pcu->cmd_mutex) { /* * If we are already in bootloader mode we can proceed with * flashing the firmware. Loading @@ -1187,11 +1178,11 @@ static ssize_t ims_pcu_update_firmware_store(struct device *dev, else error = ims_pcu_switch_to_bootloader(pcu); release_firmware(fw); if (error) return error; } out: mutex_unlock(&pcu->cmd_mutex); return error ?: count; return count; } static DEVICE_ATTR(update_firmware, S_IWUSR, Loading Loading @@ -1301,12 +1292,11 @@ static ssize_t ims_pcu_ofn_reg_data_show(struct device *dev, int error; u8 data; mutex_lock(&pcu->cmd_mutex); scoped_guard(mutex, &pcu->cmd_mutex) { error = ims_pcu_read_ofn_config(pcu, pcu->ofn_reg_addr, &data); mutex_unlock(&pcu->cmd_mutex); if (error) return error; } return sysfs_emit(buf, "%x\n", data); } Loading @@ -1324,11 +1314,13 @@ static ssize_t ims_pcu_ofn_reg_data_store(struct device *dev, if (error) return error; mutex_lock(&pcu->cmd_mutex); guard(mutex)(&pcu->cmd_mutex); error = ims_pcu_write_ofn_config(pcu, pcu->ofn_reg_addr, value); mutex_unlock(&pcu->cmd_mutex); if (error) return error; return error ?: count; return count; } static DEVICE_ATTR(reg_data, S_IRUGO | S_IWUSR, Loading @@ -1340,13 +1332,10 @@ static ssize_t ims_pcu_ofn_reg_addr_show(struct device *dev, { struct usb_interface *intf = to_usb_interface(dev); struct ims_pcu *pcu = usb_get_intfdata(intf); int error; mutex_lock(&pcu->cmd_mutex); error = sysfs_emit(buf, "%x\n", pcu->ofn_reg_addr); mutex_unlock(&pcu->cmd_mutex); guard(mutex)(&pcu->cmd_mutex); return error; return sysfs_emit(buf, "%x\n", pcu->ofn_reg_addr); } static ssize_t ims_pcu_ofn_reg_addr_store(struct device *dev, Loading @@ -1362,9 +1351,9 @@ static ssize_t ims_pcu_ofn_reg_addr_store(struct device *dev, if (error) return error; mutex_lock(&pcu->cmd_mutex); guard(mutex)(&pcu->cmd_mutex); pcu->ofn_reg_addr = value; mutex_unlock(&pcu->cmd_mutex); return count; } Loading @@ -1389,12 +1378,11 @@ static ssize_t ims_pcu_ofn_bit_show(struct device *dev, int error; u8 data; mutex_lock(&pcu->cmd_mutex); scoped_guard(mutex, &pcu->cmd_mutex) { error = ims_pcu_read_ofn_config(pcu, attr->addr, &data); mutex_unlock(&pcu->cmd_mutex); if (error) return error; } return sysfs_emit(buf, "%d\n", !!(data & (1 << attr->nr))); } Loading @@ -1418,21 +1406,22 @@ static ssize_t ims_pcu_ofn_bit_store(struct device *dev, if (value > 1) return -EINVAL; mutex_lock(&pcu->cmd_mutex); scoped_guard(mutex, &pcu->cmd_mutex) { error = ims_pcu_read_ofn_config(pcu, attr->addr, &data); if (!error) { if (error) return error; if (value) data |= 1U << attr->nr; else data &= ~(1U << attr->nr); error = ims_pcu_write_ofn_config(pcu, attr->addr, data); if (error) return error; } mutex_unlock(&pcu->cmd_mutex); return error ?: count; return count; } #define IMS_PCU_OFN_BIT_ATTR(_field, _addr, _nr) \ Loading Loading
drivers/input/misc/ims-pcu.c +62 −73 Original line number Diff line number Diff line Loading @@ -927,9 +927,8 @@ static void ims_pcu_process_async_firmware(const struct firmware *fw, goto out; } mutex_lock(&pcu->cmd_mutex); scoped_guard(mutex, &pcu->cmd_mutex) ims_pcu_handle_firmware_update(pcu, fw); mutex_unlock(&pcu->cmd_mutex); release_firmware(fw); Loading @@ -953,7 +952,7 @@ static int ims_pcu_backlight_set_brightness(struct led_classdev *cdev, __le16 br_val = cpu_to_le16(value); int error; mutex_lock(&pcu->cmd_mutex); guard(mutex)(&pcu->cmd_mutex); error = ims_pcu_execute_command(pcu, SET_BRIGHTNESS, &br_val, sizeof(br_val)); Loading @@ -962,8 +961,6 @@ static int ims_pcu_backlight_set_brightness(struct led_classdev *cdev, "Failed to set desired brightness %u, error: %d\n", value, error); mutex_unlock(&pcu->cmd_mutex); return error; } Loading @@ -977,7 +974,7 @@ ims_pcu_backlight_get_brightness(struct led_classdev *cdev) int brightness; int error; mutex_lock(&pcu->cmd_mutex); guard(mutex)(&pcu->cmd_mutex); error = ims_pcu_execute_query(pcu, GET_BRIGHTNESS); if (error) { Loading @@ -991,8 +988,6 @@ ims_pcu_backlight_get_brightness(struct led_classdev *cdev) get_unaligned_le16(&pcu->cmd_buf[IMS_PCU_DATA_OFFSET]); } mutex_unlock(&pcu->cmd_mutex); return brightness; } Loading Loading @@ -1072,10 +1067,7 @@ static ssize_t ims_pcu_attribute_store(struct device *dev, if (data_len > attr->field_length) return -EINVAL; error = mutex_lock_interruptible(&pcu->cmd_mutex); if (error) return error; scoped_cond_guard(mutex, return -EINTR, &pcu->cmd_mutex) { memset(field, 0, attr->field_length); memcpy(field, buf, data_len); Loading @@ -1087,9 +1079,11 @@ static ssize_t ims_pcu_attribute_store(struct device *dev, */ ims_pcu_get_info(pcu); mutex_unlock(&pcu->cmd_mutex); if (error) return error; } return error < 0 ? error : count; return count; } #define IMS_PCU_ATTR(_field, _mode) \ Loading Loading @@ -1152,7 +1146,6 @@ static ssize_t ims_pcu_update_firmware_store(struct device *dev, { struct usb_interface *intf = to_usb_interface(dev); struct ims_pcu *pcu = usb_get_intfdata(intf); const struct firmware *fw = NULL; int value; int error; Loading @@ -1163,17 +1156,15 @@ static ssize_t ims_pcu_update_firmware_store(struct device *dev, if (value != 1) return -EINVAL; error = mutex_lock_interruptible(&pcu->cmd_mutex); if (error) return error; const struct firmware *fw __free(firmware) = NULL; error = request_ihex_firmware(&fw, IMS_PCU_FIRMWARE_NAME, pcu->dev); if (error) { dev_err(pcu->dev, "Failed to request firmware %s, error: %d\n", IMS_PCU_FIRMWARE_NAME, error); goto out; return error; } scoped_cond_guard(mutex_intr, return -EINTR, &pcu->cmd_mutex) { /* * If we are already in bootloader mode we can proceed with * flashing the firmware. Loading @@ -1187,11 +1178,11 @@ static ssize_t ims_pcu_update_firmware_store(struct device *dev, else error = ims_pcu_switch_to_bootloader(pcu); release_firmware(fw); if (error) return error; } out: mutex_unlock(&pcu->cmd_mutex); return error ?: count; return count; } static DEVICE_ATTR(update_firmware, S_IWUSR, Loading Loading @@ -1301,12 +1292,11 @@ static ssize_t ims_pcu_ofn_reg_data_show(struct device *dev, int error; u8 data; mutex_lock(&pcu->cmd_mutex); scoped_guard(mutex, &pcu->cmd_mutex) { error = ims_pcu_read_ofn_config(pcu, pcu->ofn_reg_addr, &data); mutex_unlock(&pcu->cmd_mutex); if (error) return error; } return sysfs_emit(buf, "%x\n", data); } Loading @@ -1324,11 +1314,13 @@ static ssize_t ims_pcu_ofn_reg_data_store(struct device *dev, if (error) return error; mutex_lock(&pcu->cmd_mutex); guard(mutex)(&pcu->cmd_mutex); error = ims_pcu_write_ofn_config(pcu, pcu->ofn_reg_addr, value); mutex_unlock(&pcu->cmd_mutex); if (error) return error; return error ?: count; return count; } static DEVICE_ATTR(reg_data, S_IRUGO | S_IWUSR, Loading @@ -1340,13 +1332,10 @@ static ssize_t ims_pcu_ofn_reg_addr_show(struct device *dev, { struct usb_interface *intf = to_usb_interface(dev); struct ims_pcu *pcu = usb_get_intfdata(intf); int error; mutex_lock(&pcu->cmd_mutex); error = sysfs_emit(buf, "%x\n", pcu->ofn_reg_addr); mutex_unlock(&pcu->cmd_mutex); guard(mutex)(&pcu->cmd_mutex); return error; return sysfs_emit(buf, "%x\n", pcu->ofn_reg_addr); } static ssize_t ims_pcu_ofn_reg_addr_store(struct device *dev, Loading @@ -1362,9 +1351,9 @@ static ssize_t ims_pcu_ofn_reg_addr_store(struct device *dev, if (error) return error; mutex_lock(&pcu->cmd_mutex); guard(mutex)(&pcu->cmd_mutex); pcu->ofn_reg_addr = value; mutex_unlock(&pcu->cmd_mutex); return count; } Loading @@ -1389,12 +1378,11 @@ static ssize_t ims_pcu_ofn_bit_show(struct device *dev, int error; u8 data; mutex_lock(&pcu->cmd_mutex); scoped_guard(mutex, &pcu->cmd_mutex) { error = ims_pcu_read_ofn_config(pcu, attr->addr, &data); mutex_unlock(&pcu->cmd_mutex); if (error) return error; } return sysfs_emit(buf, "%d\n", !!(data & (1 << attr->nr))); } Loading @@ -1418,21 +1406,22 @@ static ssize_t ims_pcu_ofn_bit_store(struct device *dev, if (value > 1) return -EINVAL; mutex_lock(&pcu->cmd_mutex); scoped_guard(mutex, &pcu->cmd_mutex) { error = ims_pcu_read_ofn_config(pcu, attr->addr, &data); if (!error) { if (error) return error; if (value) data |= 1U << attr->nr; else data &= ~(1U << attr->nr); error = ims_pcu_write_ofn_config(pcu, attr->addr, data); if (error) return error; } mutex_unlock(&pcu->cmd_mutex); return error ?: count; return count; } #define IMS_PCU_OFN_BIT_ATTR(_field, _addr, _nr) \ Loading