Lines Matching refs:pca963x

106 struct pca963x {  struct
114 struct pca963x *chip; argument
125 static void pca963x_brightness_work(struct pca963x_led *pca963x) in pca963x_brightness_work() argument
127 u8 ledout_addr = pca963x->chip->chipdef->ledout_base in pca963x_brightness_work()
128 + (pca963x->led_num / 4); in pca963x_brightness_work()
130 int shift = 2 * (pca963x->led_num % 4); in pca963x_brightness_work()
133 mutex_lock(&pca963x->chip->mutex); in pca963x_brightness_work()
134 ledout = i2c_smbus_read_byte_data(pca963x->chip->client, ledout_addr); in pca963x_brightness_work()
135 switch (pca963x->brightness) { in pca963x_brightness_work()
137 i2c_smbus_write_byte_data(pca963x->chip->client, ledout_addr, in pca963x_brightness_work()
141 i2c_smbus_write_byte_data(pca963x->chip->client, ledout_addr, in pca963x_brightness_work()
145 i2c_smbus_write_byte_data(pca963x->chip->client, in pca963x_brightness_work()
146 PCA963X_PWM_BASE + pca963x->led_num, in pca963x_brightness_work()
147 pca963x->brightness); in pca963x_brightness_work()
148 i2c_smbus_write_byte_data(pca963x->chip->client, ledout_addr, in pca963x_brightness_work()
152 mutex_unlock(&pca963x->chip->mutex); in pca963x_brightness_work()
155 static void pca963x_blink_work(struct pca963x_led *pca963x) in pca963x_blink_work() argument
157 u8 ledout_addr = pca963x->chip->chipdef->ledout_base + in pca963x_blink_work()
158 (pca963x->led_num / 4); in pca963x_blink_work()
160 u8 mode2 = i2c_smbus_read_byte_data(pca963x->chip->client, in pca963x_blink_work()
162 int shift = 2 * (pca963x->led_num % 4); in pca963x_blink_work()
165 i2c_smbus_write_byte_data(pca963x->chip->client, in pca963x_blink_work()
166 pca963x->chip->chipdef->grppwm, pca963x->gdc); in pca963x_blink_work()
168 i2c_smbus_write_byte_data(pca963x->chip->client, in pca963x_blink_work()
169 pca963x->chip->chipdef->grpfreq, pca963x->gfrq); in pca963x_blink_work()
172 i2c_smbus_write_byte_data(pca963x->chip->client, PCA963X_MODE2, in pca963x_blink_work()
175 mutex_lock(&pca963x->chip->mutex); in pca963x_blink_work()
176 ledout = i2c_smbus_read_byte_data(pca963x->chip->client, ledout_addr); in pca963x_blink_work()
178 i2c_smbus_write_byte_data(pca963x->chip->client, ledout_addr, in pca963x_blink_work()
180 mutex_unlock(&pca963x->chip->mutex); in pca963x_blink_work()
185 struct pca963x_led *pca963x = container_of(work, in pca963x_work() local
188 switch (pca963x->cmd) { in pca963x_work()
190 pca963x_brightness_work(pca963x); in pca963x_work()
193 pca963x_blink_work(pca963x); in pca963x_work()
201 struct pca963x_led *pca963x; in pca963x_led_set() local
203 pca963x = container_of(led_cdev, struct pca963x_led, led_cdev); in pca963x_led_set()
205 pca963x->cmd = BRIGHTNESS_SET; in pca963x_led_set()
206 pca963x->brightness = value; in pca963x_led_set()
212 schedule_work(&pca963x->work); in pca963x_led_set()
218 struct pca963x_led *pca963x; in pca963x_blink_set() local
222 pca963x = container_of(led_cdev, struct pca963x_led, led_cdev); in pca963x_blink_set()
257 pca963x->cmd = BLINK_SET; in pca963x_blink_set()
258 pca963x->gdc = gdc; in pca963x_blink_set()
259 pca963x->gfrq = gfrq; in pca963x_blink_set()
265 schedule_work(&pca963x->work); in pca963x_blink_set()
346 struct pca963x *pca963x_chip; in pca963x_probe()
347 struct pca963x_led *pca963x; in pca963x_probe() local
374 pca963x = devm_kzalloc(&client->dev, chip->n_leds * sizeof(*pca963x), in pca963x_probe()
376 if (!pca963x) in pca963x_probe()
384 pca963x_chip->leds = pca963x; in pca963x_probe()
391 pca963x[i].led_num = i; in pca963x_probe()
392 pca963x[i].chip = pca963x_chip; in pca963x_probe()
397 snprintf(pca963x[i].name, in pca963x_probe()
398 sizeof(pca963x[i].name), "pca963x:%s", in pca963x_probe()
401 pca963x[i].led_cdev.default_trigger = in pca963x_probe()
406 snprintf(pca963x[i].name, sizeof(pca963x[i].name), in pca963x_probe()
410 pca963x[i].led_cdev.name = pca963x[i].name; in pca963x_probe()
411 pca963x[i].led_cdev.brightness_set = pca963x_led_set; in pca963x_probe()
414 pca963x[i].led_cdev.blink_set = pca963x_blink_set; in pca963x_probe()
416 INIT_WORK(&pca963x[i].work, pca963x_work); in pca963x_probe()
418 err = led_classdev_register(&client->dev, &pca963x[i].led_cdev); in pca963x_probe()
438 led_classdev_unregister(&pca963x[i].led_cdev); in pca963x_probe()
439 cancel_work_sync(&pca963x[i].work); in pca963x_probe()
447 struct pca963x *pca963x = i2c_get_clientdata(client); in pca963x_remove() local
450 for (i = 0; i < pca963x->chipdef->n_leds; i++) { in pca963x_remove()
451 led_classdev_unregister(&pca963x->leds[i].led_cdev); in pca963x_remove()
452 cancel_work_sync(&pca963x->leds[i].work); in pca963x_remove()