Lines Matching defs:pca

91 static bool pca9685_pwm_test_and_set_inuse(struct pca9685 *pca, int pwm_idx)
95 mutex_lock(&pca->lock);
101 if (!bitmap_empty(pca->pwms_inuse, PCA9685_MAXCHAN)) {
110 if (test_bit(PCA9685_MAXCHAN, pca->pwms_inuse)) {
115 is_inuse = test_and_set_bit(pwm_idx, pca->pwms_inuse);
117 mutex_unlock(&pca->lock);
121 static void pca9685_pwm_clear_inuse(struct pca9685 *pca, int pwm_idx)
123 mutex_lock(&pca->lock);
124 clear_bit(pwm_idx, pca->pwms_inuse);
125 mutex_unlock(&pca->lock);
130 struct pca9685 *pca = gpiochip_get_data(gpio);
132 if (pca9685_pwm_test_and_set_inuse(pca, offset))
134 pm_runtime_get_sync(pca->chip.dev);
140 struct pca9685 *pca = gpiochip_get_data(gpio);
141 struct pwm_device *pwm = &pca->chip.pwms[offset];
144 regmap_read(pca->regmap, LED_N_ON_H(pwm->hwpwm), &value);
152 struct pca9685 *pca = gpiochip_get_data(gpio);
153 struct pwm_device *pwm = &pca->chip.pwms[offset];
157 regmap_write(pca->regmap, LED_N_OFF_L(pwm->hwpwm), 0);
158 regmap_write(pca->regmap, LED_N_OFF_H(pwm->hwpwm), 0);
161 regmap_write(pca->regmap, LED_N_ON_H(pwm->hwpwm), on);
166 struct pca9685 *pca = gpiochip_get_data(gpio);
169 pm_runtime_put(pca->chip.dev);
170 pca9685_pwm_clear_inuse(pca, offset);
200 static int pca9685_pwm_gpio_probe(struct pca9685 *pca)
202 struct device *dev = pca->chip.dev;
204 mutex_init(&pca->lock);
206 pca->gpio.label = dev_name(dev);
207 pca->gpio.parent = dev;
208 pca->gpio.request = pca9685_pwm_gpio_request;
209 pca->gpio.free = pca9685_pwm_gpio_free;
210 pca->gpio.get_direction = pca9685_pwm_gpio_get_direction;
211 pca->gpio.direction_input = pca9685_pwm_gpio_direction_input;
212 pca->gpio.direction_output = pca9685_pwm_gpio_direction_output;
213 pca->gpio.get = pca9685_pwm_gpio_get;
214 pca->gpio.set = pca9685_pwm_gpio_set;
215 pca->gpio.base = -1;
216 pca->gpio.ngpio = PCA9685_MAXCHAN;
217 pca->gpio.can_sleep = true;
219 return devm_gpiochip_add_data(dev, &pca->gpio, pca);
222 static inline bool pca9685_pwm_test_and_set_inuse(struct pca9685 *pca,
229 pca9685_pwm_clear_inuse(struct pca9685 *pca, int pwm_idx)
233 static inline int pca9685_pwm_gpio_probe(struct pca9685 *pca)
239 static void pca9685_set_sleep_mode(struct pca9685 *pca, bool enable)
241 regmap_update_bits(pca->regmap, PCA9685_MODE1,
252 struct pca9685 *pca = to_pca(chip);
257 if (period_ns != pca->period_ns) {
270 pca9685_set_sleep_mode(pca, true);
273 regmap_write(pca->regmap, PCA9685_PRESCALE, prescale);
276 pca9685_set_sleep_mode(pca, false);
278 pca->period_ns = period_ns;
292 regmap_write(pca->regmap, reg, LED_FULL);
304 regmap_write(pca->regmap, reg, 0x0);
311 regmap_write(pca->regmap, reg, 0x0);
319 regmap_write(pca->regmap, reg, LED_FULL);
332 regmap_write(pca->regmap, reg, (int)duty & 0xff);
339 regmap_write(pca->regmap, reg, ((int)duty >> 8) & 0xf);
347 regmap_write(pca->regmap, reg, 0);
354 struct pca9685 *pca = to_pca(chip);
366 regmap_write(pca->regmap, reg, 0);
373 regmap_write(pca->regmap, reg, 0);
384 regmap_update_bits(pca->regmap, reg, LED_FULL, 0x0);
391 struct pca9685 *pca = to_pca(chip);
399 regmap_write(pca->regmap, reg, LED_FULL);
407 regmap_write(pca->regmap, reg, 0x0);
412 struct pca9685 *pca = to_pca(chip);
414 if (pca9685_pwm_test_and_set_inuse(pca, pwm->hwpwm))
423 struct pca9685 *pca = to_pca(chip);
427 pca9685_pwm_clear_inuse(pca, pwm->hwpwm);
449 struct pca9685 *pca;
453 pca = devm_kzalloc(&client->dev, sizeof(*pca), GFP_KERNEL);
454 if (!pca)
457 pca->regmap = devm_regmap_init_i2c(client, &pca9685_regmap_i2c_config);
458 if (IS_ERR(pca->regmap)) {
459 ret = PTR_ERR(pca->regmap);
464 pca->period_ns = PCA9685_DEFAULT_PERIOD;
466 i2c_set_clientdata(client, pca);
468 regmap_read(pca->regmap, PCA9685_MODE2, &reg);
480 regmap_write(pca->regmap, PCA9685_MODE2, reg);
483 regmap_read(pca->regmap, PCA9685_MODE1, &reg);
485 regmap_write(pca->regmap, PCA9685_MODE1, reg);
488 regmap_write(pca->regmap, PCA9685_ALL_LED_OFF_L, 0);
489 regmap_write(pca->regmap, PCA9685_ALL_LED_OFF_H, 0);
491 pca->chip.ops = &pca9685_pwm_ops;
493 pca->chip.npwm = PCA9685_MAXCHAN + 1;
495 pca->chip.dev = &client->dev;
496 pca->chip.base = -1;
498 ret = pwmchip_add(&pca->chip);
502 ret = pca9685_pwm_gpio_probe(pca);
504 pwmchip_remove(&pca->chip);
521 struct pca9685 *pca = i2c_get_clientdata(client);
524 ret = pwmchip_remove(&pca->chip);
534 struct pca9685 *pca = i2c_get_clientdata(client);
536 pca9685_set_sleep_mode(pca, true);
543 struct pca9685 *pca = i2c_get_clientdata(client);
545 pca9685_set_sleep_mode(pca, false);