Symbol: pca955x
drivers/leds/leds-pca955x.c
129
struct pca955x *pca955x;
drivers/leds/leds-pca955x.c
176
static int pca955x_write_psc(struct pca955x *pca955x, int n, u8 val)
drivers/leds/leds-pca955x.c
178
u8 cmd = pca955x_num_input_regs(pca955x->chipdef->bits) + (2 * n);
drivers/leds/leds-pca955x.c
181
ret = i2c_smbus_write_byte_data(pca955x->client, cmd, val);
drivers/leds/leds-pca955x.c
183
dev_err(&pca955x->client->dev, "%s: reg 0x%x, val 0x%x, err %d\n", __func__, n,
drivers/leds/leds-pca955x.c
195
static int pca955x_write_pwm(struct pca955x *pca955x, int n, u8 val)
drivers/leds/leds-pca955x.c
197
u8 cmd = pca955x_num_input_regs(pca955x->chipdef->bits) + 1 + (2 * n);
drivers/leds/leds-pca955x.c
200
ret = i2c_smbus_write_byte_data(pca955x->client, cmd, val);
drivers/leds/leds-pca955x.c
202
dev_err(&pca955x->client->dev, "%s: reg 0x%x, val 0x%x, err %d\n", __func__, n,
drivers/leds/leds-pca955x.c
211
static int pca955x_write_ls(struct pca955x *pca955x, int n, u8 val)
drivers/leds/leds-pca955x.c
213
u8 cmd = pca955x_num_input_regs(pca955x->chipdef->bits) + 4 + n;
drivers/leds/leds-pca955x.c
216
ret = i2c_smbus_write_byte_data(pca955x->client, cmd, val);
drivers/leds/leds-pca955x.c
218
dev_err(&pca955x->client->dev, "%s: reg 0x%x, val 0x%x, err %d\n", __func__, n,
drivers/leds/leds-pca955x.c
227
static int pca955x_read_ls(struct pca955x *pca955x, int n, u8 *val)
drivers/leds/leds-pca955x.c
229
u8 cmd = pca955x_num_input_regs(pca955x->chipdef->bits) + 4 + n;
drivers/leds/leds-pca955x.c
232
ret = i2c_smbus_read_byte_data(pca955x->client, cmd);
drivers/leds/leds-pca955x.c
234
dev_err(&pca955x->client->dev, "%s: reg 0x%x, err %d\n", __func__, n, ret);
drivers/leds/leds-pca955x.c
241
static int pca955x_read_pwm(struct pca955x *pca955x, int n, u8 *val)
drivers/leds/leds-pca955x.c
243
u8 cmd = pca955x_num_input_regs(pca955x->chipdef->bits) + 1 + (2 * n);
drivers/leds/leds-pca955x.c
246
ret = i2c_smbus_read_byte_data(pca955x->client, cmd);
drivers/leds/leds-pca955x.c
248
dev_err(&pca955x->client->dev, "%s: reg 0x%x, err %d\n", __func__, n, ret);
drivers/leds/leds-pca955x.c
255
static int pca955x_read_psc(struct pca955x *pca955x, int n, u8 *val)
drivers/leds/leds-pca955x.c
260
cmd = pca955x_num_input_regs(pca955x->chipdef->bits) + (2 * n);
drivers/leds/leds-pca955x.c
261
ret = i2c_smbus_read_byte_data(pca955x->client, cmd);
drivers/leds/leds-pca955x.c
263
dev_err(&pca955x->client->dev, "%s: reg 0x%x, err %d\n", __func__, n, ret);
drivers/leds/leds-pca955x.c
273
struct pca955x *pca955x = pca955x_led->pca955x;
drivers/leds/leds-pca955x.c
277
ret = pca955x_read_ls(pca955x, pca955x_led->led_num / 4, &ls);
drivers/leds/leds-pca955x.c
290
ret = pca955x_read_pwm(pca955x, 1, &pwm);
drivers/leds/leds-pca955x.c
304
struct pca955x *pca955x = pca955x_led->pca955x;
drivers/leds/leds-pca955x.c
310
mutex_lock(&pca955x->lock);
drivers/leds/leds-pca955x.c
312
ret = pca955x_read_ls(pca955x, reg, &ls);
drivers/leds/leds-pca955x.c
316
if (test_bit(pca955x_led->led_num, &pca955x->active_blink)) {
drivers/leds/leds-pca955x.c
318
clear_bit(pca955x_led->led_num, &pca955x->active_blink);
drivers/leds/leds-pca955x.c
340
ret = pca955x_write_pwm(pca955x, 1, 255 - value);
drivers/leds/leds-pca955x.c
348
ret = pca955x_write_ls(pca955x, reg, ls);
drivers/leds/leds-pca955x.c
351
mutex_unlock(&pca955x->lock);
drivers/leds/leds-pca955x.c
356
static u8 pca955x_period_to_psc(struct pca955x *pca955x, unsigned long period)
drivers/leds/leds-pca955x.c
359
period *= pca955x->chipdef->blink_div;
drivers/leds/leds-pca955x.c
366
static unsigned long pca955x_psc_to_period(struct pca955x *pca955x, u8 psc)
drivers/leds/leds-pca955x.c
373
period /= pca955x->chipdef->blink_div;
drivers/leds/leds-pca955x.c
382
struct pca955x *pca955x = pca955x_led->pca955x;
drivers/leds/leds-pca955x.c
386
mutex_lock(&pca955x->lock);
drivers/leds/leds-pca955x.c
394
if (period < pca955x_psc_to_period(pca955x, 0) ||
drivers/leds/leds-pca955x.c
395
period > pca955x_psc_to_period(pca955x, 0xff)) {
drivers/leds/leds-pca955x.c
400
period = pca955x->active_blink ? pca955x->blink_period :
drivers/leds/leds-pca955x.c
404
if (!pca955x->active_blink ||
drivers/leds/leds-pca955x.c
405
pca955x->active_blink == BIT(pca955x_led->led_num) ||
drivers/leds/leds-pca955x.c
406
pca955x->blink_period == period) {
drivers/leds/leds-pca955x.c
407
u8 psc = pca955x_period_to_psc(pca955x, period);
drivers/leds/leds-pca955x.c
410
&pca955x->active_blink)) {
drivers/leds/leds-pca955x.c
415
ret = pca955x_read_ls(pca955x, reg, &ls);
drivers/leds/leds-pca955x.c
420
ret = pca955x_write_ls(pca955x, reg, ls);
drivers/leds/leds-pca955x.c
428
ret = pca955x_write_pwm(pca955x, 0, 128);
drivers/leds/leds-pca955x.c
433
if (pca955x->blink_period != period) {
drivers/leds/leds-pca955x.c
434
pca955x->blink_period = period;
drivers/leds/leds-pca955x.c
435
ret = pca955x_write_psc(pca955x, 0, psc);
drivers/leds/leds-pca955x.c
440
period = pca955x_psc_to_period(pca955x, psc);
drivers/leds/leds-pca955x.c
449
mutex_unlock(&pca955x->lock);
drivers/leds/leds-pca955x.c
474
struct pca955x *pca955x = gpiochip_get_data(gc);
drivers/leds/leds-pca955x.c
476
return test_and_set_bit(offset, &pca955x->active_pins) ? -EBUSY : 0;
drivers/leds/leds-pca955x.c
481
struct pca955x *pca955x = gpiochip_get_data(gc);
drivers/leds/leds-pca955x.c
483
clear_bit(offset, &pca955x->active_pins);
drivers/leds/leds-pca955x.c
489
struct pca955x *pca955x = gpiochip_get_data(gc);
drivers/leds/leds-pca955x.c
490
struct pca955x_led *led = &pca955x->leds[offset];
drivers/leds/leds-pca955x.c
506
struct pca955x *pca955x = gpiochip_get_data(gc);
drivers/leds/leds-pca955x.c
507
struct pca955x_led *led = &pca955x->leds[offset];
drivers/leds/leds-pca955x.c
511
pca955x_read_input(pca955x->client, led->led_num / 8, &reg);
drivers/leds/leds-pca955x.c
519
struct pca955x *pca955x = gpiochip_get_data(gc);
drivers/leds/leds-pca955x.c
520
struct pca955x_led *led = &pca955x->leds[offset];
drivers/leds/leds-pca955x.c
578
struct pca955x *pca955x;
drivers/leds/leds-pca955x.c
626
pca955x = devm_kzalloc(&client->dev, sizeof(*pca955x), GFP_KERNEL);
drivers/leds/leds-pca955x.c
627
if (!pca955x)
drivers/leds/leds-pca955x.c
630
pca955x->leds = devm_kcalloc(&client->dev, chip->bits,
drivers/leds/leds-pca955x.c
632
if (!pca955x->leds)
drivers/leds/leds-pca955x.c
635
i2c_set_clientdata(client, pca955x);
drivers/leds/leds-pca955x.c
637
mutex_init(&pca955x->lock);
drivers/leds/leds-pca955x.c
638
pca955x->client = client;
drivers/leds/leds-pca955x.c
639
pca955x->chipdef = chip;
drivers/leds/leds-pca955x.c
640
pca955x->blink_period = PCA955X_BLINK_DEFAULT_MS;
drivers/leds/leds-pca955x.c
657
pca955x_led = &pca955x->leds[i];
drivers/leds/leds-pca955x.c
659
pca955x_led->pca955x = pca955x;
drivers/leds/leds-pca955x.c
680
set_bit(i, &pca955x->active_blink);
drivers/leds/leds-pca955x.c
707
set_bit(i, &pca955x->active_pins);
drivers/leds/leds-pca955x.c
713
err = pca955x_write_ls(pca955x, i, ls2[i]);
drivers/leds/leds-pca955x.c
720
err = pca955x_read_psc(pca955x, 0, &psc0);
drivers/leds/leds-pca955x.c
722
psc0 = pca955x_period_to_psc(pca955x, pca955x->blink_period);
drivers/leds/leds-pca955x.c
723
err = pca955x_write_psc(pca955x, 0, psc0);
drivers/leds/leds-pca955x.c
729
pca955x->blink_period = pca955x_psc_to_period(pca955x, psc0);
drivers/leds/leds-pca955x.c
732
err = pca955x_write_psc(pca955x, 1, 0);
drivers/leds/leds-pca955x.c
737
pca955x->gpio.label = "gpio-pca955x";
drivers/leds/leds-pca955x.c
738
pca955x->gpio.direction_input = pca955x_gpio_direction_input;
drivers/leds/leds-pca955x.c
739
pca955x->gpio.direction_output = pca955x_gpio_direction_output;
drivers/leds/leds-pca955x.c
740
pca955x->gpio.set = pca955x_gpio_set_value;
drivers/leds/leds-pca955x.c
741
pca955x->gpio.get = pca955x_gpio_get_value;
drivers/leds/leds-pca955x.c
742
pca955x->gpio.request = pca955x_gpio_request_pin;
drivers/leds/leds-pca955x.c
743
pca955x->gpio.free = pca955x_gpio_free_pin;
drivers/leds/leds-pca955x.c
744
pca955x->gpio.can_sleep = 1;
drivers/leds/leds-pca955x.c
745
pca955x->gpio.base = -1;
drivers/leds/leds-pca955x.c
746
pca955x->gpio.ngpio = chip->bits;
drivers/leds/leds-pca955x.c
747
pca955x->gpio.parent = &client->dev;
drivers/leds/leds-pca955x.c
748
pca955x->gpio.owner = THIS_MODULE;
drivers/leds/leds-pca955x.c
750
err = devm_gpiochip_add_data(&client->dev, &pca955x->gpio,
drivers/leds/leds-pca955x.c
751
pca955x);
drivers/leds/leds-pca955x.c
754
pca955x->gpio.parent = NULL;
drivers/leds/leds-pca955x.c
759
pca955x->gpio.base, pca955x->gpio.base +
drivers/leds/leds-pca955x.c
760
pca955x->gpio.ngpio - 1);