Lines Matching full:pc

48 static void gpio_pwm_off(struct gpio_pwm_chip *pc)  in gpio_pwm_off()  argument
50 enum pwm_polarity polarity = pwm_get_polarity(pc->chip.pwms); in gpio_pwm_off()
52 gpiod_set_value(pc->gpiod, polarity ? 1 : 0); in gpio_pwm_off()
55 static void gpio_pwm_on(struct gpio_pwm_chip *pc) in gpio_pwm_on() argument
57 enum pwm_polarity polarity = pwm_get_polarity(pc->chip.pwms); in gpio_pwm_on()
59 gpiod_set_value(pc->gpiod, polarity ? 0 : 1); in gpio_pwm_on()
64 struct gpio_pwm_chip *pc = container_of(timer, in gpio_pwm_timer() local
67 if (!pwm_is_enabled(pc->chip.pwms)) { in gpio_pwm_timer()
68 gpio_pwm_off(pc); in gpio_pwm_timer()
69 pc->pin_on = false; in gpio_pwm_timer()
73 if (!pc->pin_on) { in gpio_pwm_timer()
74 hrtimer_forward_now(&pc->timer, ns_to_ktime(pc->on_time)); in gpio_pwm_timer()
76 if (pc->on_time) { in gpio_pwm_timer()
77 gpio_pwm_on(pc); in gpio_pwm_timer()
78 pc->pin_on = true; in gpio_pwm_timer()
82 hrtimer_forward_now(&pc->timer, ns_to_ktime(pc->off_time)); in gpio_pwm_timer()
84 if (pc->off_time) { in gpio_pwm_timer()
85 gpio_pwm_off(pc); in gpio_pwm_timer()
86 pc->pin_on = false; in gpio_pwm_timer()
96 struct gpio_pwm_chip *pc = to_gpio_pwm_chip(chip); in gpio_pwm_config() local
98 pc->on_time = duty_ns; in gpio_pwm_config()
99 pc->off_time = period_ns - duty_ns; in gpio_pwm_config()
112 struct gpio_pwm_chip *pc = to_gpio_pwm_chip(chip); in gpio_pwm_enable() local
114 if (pwm_is_enabled(pc->chip.pwms)) in gpio_pwm_enable()
117 if (pc->off_time) { in gpio_pwm_enable()
118 hrtimer_start(&pc->timer, ktime_set(0, 0), HRTIMER_MODE_REL); in gpio_pwm_enable()
120 if (pc->on_time) in gpio_pwm_enable()
121 gpio_pwm_on(pc); in gpio_pwm_enable()
123 gpio_pwm_off(pc); in gpio_pwm_enable()
131 struct gpio_pwm_chip *pc = to_gpio_pwm_chip(chip); in gpio_pwm_disable() local
133 if (!pc->off_time) in gpio_pwm_disable()
134 gpio_pwm_off(pc); in gpio_pwm_disable()
148 struct gpio_pwm_chip *pc; in gpio_pwm_probe() local
150 pc = devm_kzalloc(&pdev->dev, sizeof(*pc), GFP_KERNEL); in gpio_pwm_probe()
151 if (!pc) in gpio_pwm_probe()
154 pc->chip.dev = &pdev->dev; in gpio_pwm_probe()
155 pc->chip.ops = &gpio_pwm_ops; in gpio_pwm_probe()
156 pc->chip.base = -1; in gpio_pwm_probe()
157 pc->chip.npwm = 1; in gpio_pwm_probe()
158 pc->chip.of_xlate = of_pwm_xlate_with_flags; in gpio_pwm_probe()
159 pc->chip.of_pwm_n_cells = 3; in gpio_pwm_probe()
161 pc->gpiod = devm_gpiod_get(&pdev->dev, "pwm", GPIOD_OUT_LOW); in gpio_pwm_probe()
163 if (IS_ERR(pc->gpiod)) in gpio_pwm_probe()
164 return PTR_ERR(pc->gpiod); in gpio_pwm_probe()
166 hrtimer_init(&pc->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); in gpio_pwm_probe()
167 pc->timer.function = &gpio_pwm_timer; in gpio_pwm_probe()
168 pc->pin_on = false; in gpio_pwm_probe()
170 if (!hrtimer_is_hres_active(&pc->timer)) in gpio_pwm_probe()
174 ret = pwmchip_add(&pc->chip); in gpio_pwm_probe()
180 platform_set_drvdata(pdev, pc); in gpio_pwm_probe()
186 struct gpio_pwm_chip *pc = platform_get_drvdata(pdev); in gpio_pwm_remove() local
188 hrtimer_cancel(&pc->timer); in gpio_pwm_remove()
189 return pwmchip_remove(&pc->chip); in gpio_pwm_remove()