Lines Matching defs:pca

95 static bool pca9685_prescaler_can_change(struct pca9685 *pca, int channel)
98 if (bitmap_empty(pca->pwms_enabled, PCA9685_MAXCHAN + 1))
101 if (bitmap_weight(pca->pwms_enabled, PCA9685_MAXCHAN + 1) > 1)
107 return test_bit(channel, pca->pwms_enabled);
110 static int pca9685_read_reg(struct pca9685 *pca, unsigned int reg, unsigned int *val)
112 struct device *dev = pca->chip.dev;
115 err = regmap_read(pca->regmap, reg, val);
122 static int pca9685_write_reg(struct pca9685 *pca, unsigned int reg, unsigned int val)
124 struct device *dev = pca->chip.dev;
127 err = regmap_write(pca->regmap, reg, val);
135 static void pca9685_pwm_set_duty(struct pca9685 *pca, int channel, unsigned int duty)
137 struct pwm_device *pwm = &pca->chip.pwms[channel];
142 pca9685_write_reg(pca, REG_OFF_H(channel), LED_FULL);
146 pca9685_write_reg(pca, REG_ON_H(channel), LED_FULL);
147 pca9685_write_reg(pca, REG_OFF_H(channel), 0);
167 pca9685_write_reg(pca, REG_ON_L(channel), on & 0xff);
168 pca9685_write_reg(pca, REG_ON_H(channel), (on >> 8) & 0xf);
170 pca9685_write_reg(pca, REG_OFF_L(channel), off & 0xff);
171 pca9685_write_reg(pca, REG_OFF_H(channel), (off >> 8) & 0xf);
174 static unsigned int pca9685_pwm_get_duty(struct pca9685 *pca, int channel)
176 struct pwm_device *pwm = &pca->chip.pwms[channel];
184 pca9685_read_reg(pca, LED_N_OFF_H(channel), &off);
190 pca9685_read_reg(pca, LED_N_ON_H(channel), &on);
196 pca9685_read_reg(pca, LED_N_OFF_L(channel), &val);
202 if (pca9685_read_reg(pca, LED_N_ON_L(channel), &val)) {
211 static bool pca9685_pwm_test_and_set_inuse(struct pca9685 *pca, int pwm_idx)
215 mutex_lock(&pca->lock);
221 if (!bitmap_empty(pca->pwms_inuse, PCA9685_MAXCHAN)) {
230 if (test_bit(PCA9685_MAXCHAN, pca->pwms_inuse)) {
235 is_inuse = test_and_set_bit(pwm_idx, pca->pwms_inuse);
237 mutex_unlock(&pca->lock);
241 static void pca9685_pwm_clear_inuse(struct pca9685 *pca, int pwm_idx)
243 mutex_lock(&pca->lock);
244 clear_bit(pwm_idx, pca->pwms_inuse);
245 mutex_unlock(&pca->lock);
250 struct pca9685 *pca = gpiochip_get_data(gpio);
252 if (pca9685_pwm_test_and_set_inuse(pca, offset))
254 pm_runtime_get_sync(pca->chip.dev);
260 struct pca9685 *pca = gpiochip_get_data(gpio);
262 return pca9685_pwm_get_duty(pca, offset) != 0;
268 struct pca9685 *pca = gpiochip_get_data(gpio);
270 pca9685_pwm_set_duty(pca, offset, value ? PCA9685_COUNTER_RANGE : 0);
275 struct pca9685 *pca = gpiochip_get_data(gpio);
277 pca9685_pwm_set_duty(pca, offset, 0);
278 pm_runtime_put(pca->chip.dev);
279 pca9685_pwm_clear_inuse(pca, offset);
309 static int pca9685_pwm_gpio_probe(struct pca9685 *pca)
311 struct device *dev = pca->chip.dev;
313 pca->gpio.label = dev_name(dev);
314 pca->gpio.parent = dev;
315 pca->gpio.request = pca9685_pwm_gpio_request;
316 pca->gpio.free = pca9685_pwm_gpio_free;
317 pca->gpio.get_direction = pca9685_pwm_gpio_get_direction;
318 pca->gpio.direction_input = pca9685_pwm_gpio_direction_input;
319 pca->gpio.direction_output = pca9685_pwm_gpio_direction_output;
320 pca->gpio.get = pca9685_pwm_gpio_get;
321 pca->gpio.set = pca9685_pwm_gpio_set;
322 pca->gpio.base = -1;
323 pca->gpio.ngpio = PCA9685_MAXCHAN;
324 pca->gpio.can_sleep = true;
326 return devm_gpiochip_add_data(dev, &pca->gpio, pca);
329 static inline bool pca9685_pwm_test_and_set_inuse(struct pca9685 *pca,
336 pca9685_pwm_clear_inuse(struct pca9685 *pca, int pwm_idx)
340 static inline int pca9685_pwm_gpio_probe(struct pca9685 *pca)
346 static void pca9685_set_sleep_mode(struct pca9685 *pca, bool enable)
348 struct device *dev = pca->chip.dev;
349 int err = regmap_update_bits(pca->regmap, PCA9685_MODE1,
366 struct pca9685 *pca = to_pca(chip);
381 pca9685_pwm_set_duty(pca, pwm->hwpwm, 0);
385 pca9685_read_reg(pca, PCA9685_PRESCALE, &val);
387 if (!pca9685_prescaler_can_change(pca, pwm->hwpwm)) {
400 pca9685_set_sleep_mode(pca, true);
403 pca9685_write_reg(pca, PCA9685_PRESCALE, prescale);
406 pca9685_set_sleep_mode(pca, false);
411 pca9685_pwm_set_duty(pca, pwm->hwpwm, duty);
418 struct pca9685 *pca = to_pca(chip);
421 mutex_lock(&pca->lock);
425 set_bit(pwm->hwpwm, pca->pwms_enabled);
427 clear_bit(pwm->hwpwm, pca->pwms_enabled);
429 mutex_unlock(&pca->lock);
437 struct pca9685 *pca = to_pca(chip);
442 pca9685_read_reg(pca, PCA9685_PRESCALE, &val);
465 duty = pca9685_pwm_get_duty(pca, pwm->hwpwm);
473 struct pca9685 *pca = to_pca(chip);
475 if (pca9685_pwm_test_and_set_inuse(pca, pwm->hwpwm))
480 mutex_lock(&pca->lock);
481 set_bit(pwm->hwpwm, pca->pwms_enabled);
482 mutex_unlock(&pca->lock);
492 struct pca9685 *pca = to_pca(chip);
494 mutex_lock(&pca->lock);
495 pca9685_pwm_set_duty(pca, pwm->hwpwm, 0);
496 clear_bit(pwm->hwpwm, pca->pwms_enabled);
497 mutex_unlock(&pca->lock);
500 pca9685_pwm_clear_inuse(pca, pwm->hwpwm);
520 struct pca9685 *pca;
524 pca = devm_kzalloc(&client->dev, sizeof(*pca), GFP_KERNEL);
525 if (!pca)
528 pca->regmap = devm_regmap_init_i2c(client, &pca9685_regmap_i2c_config);
529 if (IS_ERR(pca->regmap)) {
530 ret = PTR_ERR(pca->regmap);
536 i2c_set_clientdata(client, pca);
538 mutex_init(&pca->lock);
540 ret = pca9685_read_reg(pca, PCA9685_MODE2, &reg);
554 ret = pca9685_write_reg(pca, PCA9685_MODE2, reg);
559 pca9685_read_reg(pca, PCA9685_MODE1, &reg);
561 pca9685_write_reg(pca, PCA9685_MODE1, reg);
564 pca9685_write_reg(pca, PCA9685_ALL_LED_OFF_L, 0);
565 pca9685_write_reg(pca, PCA9685_ALL_LED_OFF_H, LED_FULL);
566 pca9685_write_reg(pca, PCA9685_ALL_LED_ON_L, 0);
567 pca9685_write_reg(pca, PCA9685_ALL_LED_ON_H, LED_FULL);
569 pca->chip.ops = &pca9685_pwm_ops;
571 pca->chip.npwm = PCA9685_MAXCHAN + 1;
573 pca->chip.dev = &client->dev;
575 ret = pwmchip_add(&pca->chip);
579 ret = pca9685_pwm_gpio_probe(pca);
581 pwmchip_remove(&pca->chip);
592 pca9685_set_sleep_mode(pca, true);
596 pca9685_set_sleep_mode(pca, false);
604 struct pca9685 *pca = i2c_get_clientdata(client);
606 pwmchip_remove(&pca->chip);
610 pca9685_set_sleep_mode(pca, true);
619 struct pca9685 *pca = i2c_get_clientdata(client);
621 pca9685_set_sleep_mode(pca, true);
628 struct pca9685 *pca = i2c_get_clientdata(client);
630 pca9685_set_sleep_mode(pca, false);