Lines Matching +full:clk +full:- +full:pwm

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
41 #include <dev/clk/clk.h>
70 /* PWM Output Alignment */
97 { "rockchip,rk3288-pwm", 1 },
98 { "rockchip,rk3399-pwm", 1 },
104 { -1, 0 }
110 clk_t clk;
123 #define RK_PWM_READ(sc, reg) bus_read_4((sc)->res, (reg))
124 #define RK_PWM_WRITE(sc, reg, val) bus_write_4((sc)->res, (reg), (val))
136 if (!ofw_bus_search_compatible(dev, compat_data)->ocd_data)
139 device_set_desc(dev, "Rockchip PWM");
153 sc->dev = dev;
155 error = clk_get_by_ofw_index(dev, 0, 0, &sc->clk);
160 error = clk_enable(sc->clk);
165 error = clk_get_freq(sc->clk, &sc->clk_freq);
171 if (bus_alloc_resources(dev, rk_pwm_spec, &sc->res) != 0) {
177 /* Read the configuration left by U-Boot */
180 sc->enabled = true;
184 sc->prescaler = reg >> RK_PWM_CTRL_PRESCALE_SHIFT;
188 sc->scaler = reg >> RK_PWM_CTRL_SCALE_SHIFT;
192 sc->using_scaler = true;
194 sc->using_scaler = false;
196 clk_freq = sc->clk_freq / (2 ^ sc->prescaler);
198 if (sc->using_scaler) {
199 if (sc->scaler == 0)
202 clk_freq /= (sc->scaler * 2);
206 sc->period = NS_PER_SEC /
209 sc->duty = NS_PER_SEC /
215 sc->busdev = device_add_child(dev, "pwmbus", DEVICE_UNIT_ANY);
232 bus_generic_detach(sc->dev);
234 bus_release_resources(dev, rk_pwm_spec, &sc->res);
280 if (period_freq > (sc->clk_freq / 2))
284 device_printf(sc->dev, "duty < period\n");
289 to use the divider due to pwm API limitations. */
295 period_out = (sc->clk_freq * period) / NS_PER_SEC;
296 duty_out = (sc->clk_freq * duty) / NS_PER_SEC;
320 sc->period = period;
321 sc->duty = duty;
333 *period = sc->period;
334 *duty = sc->duty;
347 if (enable && sc->enabled)
355 sc->enabled = enable;
367 *enabled = sc->enabled;
381 /* pwm interface */
392 "pwm",