• Home
  • Raw
  • Download

Lines Matching full:pca

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