ep93xx_pwm
clk_disable_unprepare(ep93xx_pwm->clk);
ret = clk_prepare_enable(ep93xx_pwm->clk);
writew(0x1, ep93xx_pwm->base + EP93XX_PWMx_ENABLE);
struct ep93xx_pwm *ep93xx_pwm;
chip = devm_pwmchip_alloc(&pdev->dev, 1, sizeof(*ep93xx_pwm));
ep93xx_pwm = to_ep93xx_pwm(chip);
ep93xx_pwm->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(ep93xx_pwm->base))
return PTR_ERR(ep93xx_pwm->base);
ep93xx_pwm->clk = devm_clk_get(&pdev->dev, "pwm_clk");
if (IS_ERR(ep93xx_pwm->clk))
return PTR_ERR(ep93xx_pwm->clk);
static inline struct ep93xx_pwm *to_ep93xx_pwm(struct pwm_chip *chip)
struct ep93xx_pwm *ep93xx_pwm = to_ep93xx_pwm(chip);
void __iomem *base = ep93xx_pwm->base;
writew(0x0, ep93xx_pwm->base + EP93XX_PWMx_ENABLE);
clk_disable_unprepare(ep93xx_pwm->clk);
ret = clk_prepare_enable(ep93xx_pwm->clk);
writew(0x1, ep93xx_pwm->base + EP93XX_PWMx_INVERT);
writew(0x0, ep93xx_pwm->base + EP93XX_PWMx_INVERT);
clk_disable_unprepare(ep93xx_pwm->clk);
writew(0x0, ep93xx_pwm->base + EP93XX_PWMx_ENABLE);
clk_disable_unprepare(ep93xx_pwm->clk);
ret = clk_prepare_enable(ep93xx_pwm->clk);
c = clk_get_rate(ep93xx_pwm->clk);