diff options
| -rw-r--r-- | drivers/leds/leds-pca9532.c | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/drivers/leds/leds-pca9532.c b/drivers/leds/leds-pca9532.c index 3937244fdcab..dba8921240f2 100644 --- a/drivers/leds/leds-pca9532.c +++ b/drivers/leds/leds-pca9532.c | |||
| @@ -35,7 +35,7 @@ struct pca9532_data { | |||
| 35 | struct pca9532_led leds[16]; | 35 | struct pca9532_led leds[16]; |
| 36 | struct mutex update_lock; | 36 | struct mutex update_lock; |
| 37 | struct input_dev *idev; | 37 | struct input_dev *idev; |
| 38 | struct work_struct work; | 38 | struct work_struct work; |
| 39 | u8 pwm[2]; | 39 | u8 pwm[2]; |
| 40 | u8 psc[2]; | 40 | u8 psc[2]; |
| 41 | }; | 41 | }; |
| @@ -87,14 +87,14 @@ static int pca9532_calcpwm(struct i2c_client *client, int pwm, int blink, | |||
| 87 | if (b > 0xFF) | 87 | if (b > 0xFF) |
| 88 | return -EINVAL; | 88 | return -EINVAL; |
| 89 | data->pwm[pwm] = b; | 89 | data->pwm[pwm] = b; |
| 90 | data->psc[pwm] = blink; | 90 | data->psc[pwm] = blink; |
| 91 | return 0; | 91 | return 0; |
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | static int pca9532_setpwm(struct i2c_client *client, int pwm) | 94 | static int pca9532_setpwm(struct i2c_client *client, int pwm) |
| 95 | { | 95 | { |
| 96 | struct pca9532_data *data = i2c_get_clientdata(client); | 96 | struct pca9532_data *data = i2c_get_clientdata(client); |
| 97 | mutex_lock(&data->update_lock); | 97 | mutex_lock(&data->update_lock); |
| 98 | i2c_smbus_write_byte_data(client, PCA9532_REG_PWM(pwm), | 98 | i2c_smbus_write_byte_data(client, PCA9532_REG_PWM(pwm), |
| 99 | data->pwm[pwm]); | 99 | data->pwm[pwm]); |
| 100 | i2c_smbus_write_byte_data(client, PCA9532_REG_PSC(pwm), | 100 | i2c_smbus_write_byte_data(client, PCA9532_REG_PSC(pwm), |
| @@ -132,11 +132,11 @@ static void pca9532_set_brightness(struct led_classdev *led_cdev, | |||
| 132 | led->state = PCA9532_ON; | 132 | led->state = PCA9532_ON; |
| 133 | else { | 133 | else { |
| 134 | led->state = PCA9532_PWM0; /* Thecus: hardcode one pwm */ | 134 | led->state = PCA9532_PWM0; /* Thecus: hardcode one pwm */ |
| 135 | err = pca9532_calcpwm(led->client, 0, 0, value); | 135 | err = pca9532_calcpwm(led->client, 0, 0, value); |
| 136 | if (err) | 136 | if (err) |
| 137 | return; /* XXX: led api doesn't allow error code? */ | 137 | return; /* XXX: led api doesn't allow error code? */ |
| 138 | } | 138 | } |
| 139 | schedule_work(&led->work); | 139 | schedule_work(&led->work); |
| 140 | } | 140 | } |
| 141 | 141 | ||
| 142 | static int pca9532_set_blink(struct led_classdev *led_cdev, | 142 | static int pca9532_set_blink(struct led_classdev *led_cdev, |
| @@ -145,7 +145,7 @@ static int pca9532_set_blink(struct led_classdev *led_cdev, | |||
| 145 | struct pca9532_led *led = ldev_to_led(led_cdev); | 145 | struct pca9532_led *led = ldev_to_led(led_cdev); |
| 146 | struct i2c_client *client = led->client; | 146 | struct i2c_client *client = led->client; |
| 147 | int psc; | 147 | int psc; |
| 148 | int err = 0; | 148 | int err = 0; |
| 149 | 149 | ||
| 150 | if (*delay_on == 0 && *delay_off == 0) { | 150 | if (*delay_on == 0 && *delay_off == 0) { |
| 151 | /* led subsystem ask us for a blink rate */ | 151 | /* led subsystem ask us for a blink rate */ |
| @@ -157,11 +157,11 @@ static int pca9532_set_blink(struct led_classdev *led_cdev, | |||
| 157 | 157 | ||
| 158 | /* Thecus specific: only use PSC/PWM 0 */ | 158 | /* Thecus specific: only use PSC/PWM 0 */ |
| 159 | psc = (*delay_on * 152-1)/1000; | 159 | psc = (*delay_on * 152-1)/1000; |
| 160 | err = pca9532_calcpwm(client, 0, psc, led_cdev->brightness); | 160 | err = pca9532_calcpwm(client, 0, psc, led_cdev->brightness); |
| 161 | if (err) | 161 | if (err) |
| 162 | return err; | 162 | return err; |
| 163 | schedule_work(&led->work); | 163 | schedule_work(&led->work); |
| 164 | return 0; | 164 | return 0; |
| 165 | } | 165 | } |
| 166 | 166 | ||
| 167 | static int pca9532_event(struct input_dev *dev, unsigned int type, | 167 | static int pca9532_event(struct input_dev *dev, unsigned int type, |
| @@ -178,15 +178,15 @@ static int pca9532_event(struct input_dev *dev, unsigned int type, | |||
| 178 | else | 178 | else |
| 179 | data->pwm[1] = 0; | 179 | data->pwm[1] = 0; |
| 180 | 180 | ||
| 181 | schedule_work(&data->work); | 181 | schedule_work(&data->work); |
| 182 | 182 | ||
| 183 | return 0; | 183 | return 0; |
| 184 | } | 184 | } |
| 185 | 185 | ||
| 186 | static void pca9532_input_work(struct work_struct *work) | 186 | static void pca9532_input_work(struct work_struct *work) |
| 187 | { | 187 | { |
| 188 | struct pca9532_data *data; | 188 | struct pca9532_data *data; |
| 189 | data = container_of(work, struct pca9532_data, work); | 189 | data = container_of(work, struct pca9532_data, work); |
| 190 | mutex_lock(&data->update_lock); | 190 | mutex_lock(&data->update_lock); |
| 191 | i2c_smbus_write_byte_data(data->client, PCA9532_REG_PWM(1), | 191 | i2c_smbus_write_byte_data(data->client, PCA9532_REG_PWM(1), |
| 192 | data->pwm[1]); | 192 | data->pwm[1]); |
| @@ -195,11 +195,11 @@ static void pca9532_input_work(struct work_struct *work) | |||
| 195 | 195 | ||
| 196 | static void pca9532_led_work(struct work_struct *work) | 196 | static void pca9532_led_work(struct work_struct *work) |
| 197 | { | 197 | { |
| 198 | struct pca9532_led *led; | 198 | struct pca9532_led *led; |
| 199 | led = container_of(work, struct pca9532_led, work); | 199 | led = container_of(work, struct pca9532_led, work); |
| 200 | if (led->state == PCA9532_PWM0) | 200 | if (led->state == PCA9532_PWM0) |
| 201 | pca9532_setpwm(led->client, 0); | 201 | pca9532_setpwm(led->client, 0); |
| 202 | pca9532_setled(led); | 202 | pca9532_setled(led); |
| 203 | } | 203 | } |
| 204 | 204 | ||
| 205 | static int pca9532_configure(struct i2c_client *client, | 205 | static int pca9532_configure(struct i2c_client *client, |
| @@ -232,7 +232,7 @@ static int pca9532_configure(struct i2c_client *client, | |||
| 232 | led->ldev.brightness = LED_OFF; | 232 | led->ldev.brightness = LED_OFF; |
| 233 | led->ldev.brightness_set = pca9532_set_brightness; | 233 | led->ldev.brightness_set = pca9532_set_brightness; |
| 234 | led->ldev.blink_set = pca9532_set_blink; | 234 | led->ldev.blink_set = pca9532_set_blink; |
| 235 | INIT_WORK(&led->work, pca9532_led_work); | 235 | INIT_WORK(&led->work, pca9532_led_work); |
| 236 | err = led_classdev_register(&client->dev, &led->ldev); | 236 | err = led_classdev_register(&client->dev, &led->ldev); |
| 237 | if (err < 0) { | 237 | if (err < 0) { |
| 238 | dev_err(&client->dev, | 238 | dev_err(&client->dev, |
| @@ -262,11 +262,11 @@ static int pca9532_configure(struct i2c_client *client, | |||
| 262 | BIT_MASK(SND_TONE); | 262 | BIT_MASK(SND_TONE); |
| 263 | data->idev->event = pca9532_event; | 263 | data->idev->event = pca9532_event; |
| 264 | input_set_drvdata(data->idev, data); | 264 | input_set_drvdata(data->idev, data); |
| 265 | INIT_WORK(&data->work, pca9532_input_work); | 265 | INIT_WORK(&data->work, pca9532_input_work); |
| 266 | err = input_register_device(data->idev); | 266 | err = input_register_device(data->idev); |
| 267 | if (err) { | 267 | if (err) { |
| 268 | input_free_device(data->idev); | 268 | input_free_device(data->idev); |
| 269 | cancel_work_sync(&data->work); | 269 | cancel_work_sync(&data->work); |
| 270 | data->idev = NULL; | 270 | data->idev = NULL; |
| 271 | goto exit; | 271 | goto exit; |
| 272 | } | 272 | } |
| @@ -283,13 +283,13 @@ exit: | |||
| 283 | break; | 283 | break; |
| 284 | case PCA9532_TYPE_LED: | 284 | case PCA9532_TYPE_LED: |
| 285 | led_classdev_unregister(&data->leds[i].ldev); | 285 | led_classdev_unregister(&data->leds[i].ldev); |
| 286 | cancel_work_sync(&data->leds[i].work); | 286 | cancel_work_sync(&data->leds[i].work); |
| 287 | break; | 287 | break; |
| 288 | case PCA9532_TYPE_N2100_BEEP: | 288 | case PCA9532_TYPE_N2100_BEEP: |
| 289 | if (data->idev != NULL) { | 289 | if (data->idev != NULL) { |
| 290 | input_unregister_device(data->idev); | 290 | input_unregister_device(data->idev); |
| 291 | input_free_device(data->idev); | 291 | input_free_device(data->idev); |
| 292 | cancel_work_sync(&data->work); | 292 | cancel_work_sync(&data->work); |
| 293 | data->idev = NULL; | 293 | data->idev = NULL; |
| 294 | } | 294 | } |
| 295 | break; | 295 | break; |
| @@ -340,13 +340,13 @@ static int pca9532_remove(struct i2c_client *client) | |||
| 340 | break; | 340 | break; |
| 341 | case PCA9532_TYPE_LED: | 341 | case PCA9532_TYPE_LED: |
| 342 | led_classdev_unregister(&data->leds[i].ldev); | 342 | led_classdev_unregister(&data->leds[i].ldev); |
| 343 | cancel_work_sync(&data->leds[i].work); | 343 | cancel_work_sync(&data->leds[i].work); |
| 344 | break; | 344 | break; |
| 345 | case PCA9532_TYPE_N2100_BEEP: | 345 | case PCA9532_TYPE_N2100_BEEP: |
| 346 | if (data->idev != NULL) { | 346 | if (data->idev != NULL) { |
| 347 | input_unregister_device(data->idev); | 347 | input_unregister_device(data->idev); |
| 348 | input_free_device(data->idev); | 348 | input_free_device(data->idev); |
| 349 | cancel_work_sync(&data->work); | 349 | cancel_work_sync(&data->work); |
| 350 | data->idev = NULL; | 350 | data->idev = NULL; |
| 351 | } | 351 | } |
| 352 | break; | 352 | break; |
