Lines Matching refs:pca

99 	struct pca9685 *pca = gpiochip_get_data(gpio);  in pca9685_pwm_gpio_request()  local
102 mutex_lock(&pca->lock); in pca9685_pwm_gpio_request()
104 pwm = &pca->chip.pwms[offset]; in pca9685_pwm_gpio_request()
107 mutex_unlock(&pca->lock); in pca9685_pwm_gpio_request()
113 mutex_unlock(&pca->lock); in pca9685_pwm_gpio_request()
114 pm_runtime_get_sync(pca->chip.dev); in pca9685_pwm_gpio_request()
118 static bool pca9685_pwm_is_gpio(struct pca9685 *pca, struct pwm_device *pwm) in pca9685_pwm_is_gpio() argument
122 mutex_lock(&pca->lock); in pca9685_pwm_is_gpio()
131 for (i = 0; i < pca->gpio.ngpio; i++) in pca9685_pwm_is_gpio()
132 if (gpiochip_is_requested(&pca->gpio, i)) { in pca9685_pwm_is_gpio()
140 mutex_unlock(&pca->lock); in pca9685_pwm_is_gpio()
146 struct pca9685 *pca = gpiochip_get_data(gpio); in pca9685_pwm_gpio_get() local
147 struct pwm_device *pwm = &pca->chip.pwms[offset]; in pca9685_pwm_gpio_get()
150 regmap_read(pca->regmap, LED_N_ON_H(pwm->hwpwm), &value); in pca9685_pwm_gpio_get()
158 struct pca9685 *pca = gpiochip_get_data(gpio); in pca9685_pwm_gpio_set() local
159 struct pwm_device *pwm = &pca->chip.pwms[offset]; in pca9685_pwm_gpio_set()
163 regmap_write(pca->regmap, LED_N_OFF_L(pwm->hwpwm), 0); in pca9685_pwm_gpio_set()
164 regmap_write(pca->regmap, LED_N_OFF_H(pwm->hwpwm), 0); in pca9685_pwm_gpio_set()
167 regmap_write(pca->regmap, LED_N_ON_H(pwm->hwpwm), on); in pca9685_pwm_gpio_set()
172 struct pca9685 *pca = gpiochip_get_data(gpio); in pca9685_pwm_gpio_free() local
176 pm_runtime_put(pca->chip.dev); in pca9685_pwm_gpio_free()
177 mutex_lock(&pca->lock); in pca9685_pwm_gpio_free()
178 pwm = &pca->chip.pwms[offset]; in pca9685_pwm_gpio_free()
180 mutex_unlock(&pca->lock); in pca9685_pwm_gpio_free()
210 static int pca9685_pwm_gpio_probe(struct pca9685 *pca) in pca9685_pwm_gpio_probe() argument
212 struct device *dev = pca->chip.dev; in pca9685_pwm_gpio_probe()
214 mutex_init(&pca->lock); in pca9685_pwm_gpio_probe()
216 pca->gpio.label = dev_name(dev); in pca9685_pwm_gpio_probe()
217 pca->gpio.parent = dev; in pca9685_pwm_gpio_probe()
218 pca->gpio.request = pca9685_pwm_gpio_request; in pca9685_pwm_gpio_probe()
219 pca->gpio.free = pca9685_pwm_gpio_free; in pca9685_pwm_gpio_probe()
220 pca->gpio.get_direction = pca9685_pwm_gpio_get_direction; in pca9685_pwm_gpio_probe()
221 pca->gpio.direction_input = pca9685_pwm_gpio_direction_input; in pca9685_pwm_gpio_probe()
222 pca->gpio.direction_output = pca9685_pwm_gpio_direction_output; in pca9685_pwm_gpio_probe()
223 pca->gpio.get = pca9685_pwm_gpio_get; in pca9685_pwm_gpio_probe()
224 pca->gpio.set = pca9685_pwm_gpio_set; in pca9685_pwm_gpio_probe()
225 pca->gpio.base = -1; in pca9685_pwm_gpio_probe()
226 pca->gpio.ngpio = PCA9685_MAXCHAN; in pca9685_pwm_gpio_probe()
227 pca->gpio.can_sleep = true; in pca9685_pwm_gpio_probe()
229 return devm_gpiochip_add_data(dev, &pca->gpio, pca); in pca9685_pwm_gpio_probe()
232 static inline bool pca9685_pwm_is_gpio(struct pca9685 *pca, in pca9685_pwm_is_gpio() argument
238 static inline int pca9685_pwm_gpio_probe(struct pca9685 *pca) in pca9685_pwm_gpio_probe() argument
244 static void pca9685_set_sleep_mode(struct pca9685 *pca, bool enable) in pca9685_set_sleep_mode() argument
246 regmap_update_bits(pca->regmap, PCA9685_MODE1, in pca9685_set_sleep_mode()
257 struct pca9685 *pca = to_pca(chip); in pca9685_pwm_config() local
262 if (period_ns != pca->period_ns) { in pca9685_pwm_config()
275 pca9685_set_sleep_mode(pca, true); in pca9685_pwm_config()
278 regmap_write(pca->regmap, PCA9685_PRESCALE, prescale); in pca9685_pwm_config()
281 pca9685_set_sleep_mode(pca, false); in pca9685_pwm_config()
283 pca->period_ns = period_ns; in pca9685_pwm_config()
291 pca->duty_ns = duty_ns; in pca9685_pwm_config()
299 regmap_write(pca->regmap, reg, LED_FULL); in pca9685_pwm_config()
311 regmap_write(pca->regmap, reg, 0x0); in pca9685_pwm_config()
318 regmap_write(pca->regmap, reg, 0x0); in pca9685_pwm_config()
326 regmap_write(pca->regmap, reg, LED_FULL); in pca9685_pwm_config()
339 regmap_write(pca->regmap, reg, (int)duty & 0xff); in pca9685_pwm_config()
346 regmap_write(pca->regmap, reg, ((int)duty >> 8) & 0xf); in pca9685_pwm_config()
354 regmap_write(pca->regmap, reg, 0); in pca9685_pwm_config()
361 struct pca9685 *pca = to_pca(chip); in pca9685_pwm_enable() local
373 regmap_write(pca->regmap, reg, 0); in pca9685_pwm_enable()
380 regmap_write(pca->regmap, reg, 0); in pca9685_pwm_enable()
391 regmap_update_bits(pca->regmap, reg, LED_FULL, 0x0); in pca9685_pwm_enable()
398 struct pca9685 *pca = to_pca(chip); in pca9685_pwm_disable() local
406 regmap_write(pca->regmap, reg, LED_FULL); in pca9685_pwm_disable()
414 regmap_write(pca->regmap, reg, 0x0); in pca9685_pwm_disable()
419 struct pca9685 *pca = to_pca(chip); in pca9685_pwm_request() local
421 if (pca9685_pwm_is_gpio(pca, pwm)) in pca9685_pwm_request()
453 struct pca9685 *pca; in pca9685_pwm_probe() local
457 pca = devm_kzalloc(&client->dev, sizeof(*pca), GFP_KERNEL); in pca9685_pwm_probe()
458 if (!pca) in pca9685_pwm_probe()
461 pca->regmap = devm_regmap_init_i2c(client, &pca9685_regmap_i2c_config); in pca9685_pwm_probe()
462 if (IS_ERR(pca->regmap)) { in pca9685_pwm_probe()
463 ret = PTR_ERR(pca->regmap); in pca9685_pwm_probe()
468 pca->duty_ns = 0; in pca9685_pwm_probe()
469 pca->period_ns = PCA9685_DEFAULT_PERIOD; in pca9685_pwm_probe()
471 i2c_set_clientdata(client, pca); in pca9685_pwm_probe()
473 regmap_read(pca->regmap, PCA9685_MODE2, &mode2); in pca9685_pwm_probe()
485 regmap_write(pca->regmap, PCA9685_MODE2, mode2); 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()
535 struct pca9685 *pca = i2c_get_clientdata(client); in pca9685_pwm_runtime_suspend() local
537 pca9685_set_sleep_mode(pca, true); in pca9685_pwm_runtime_suspend()
544 struct pca9685 *pca = i2c_get_clientdata(client); in pca9685_pwm_runtime_resume() local
546 pca9685_set_sleep_mode(pca, false); in pca9685_pwm_runtime_resume()