Lines Matching +full:dev +full:- +full:ctrl
1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (c) 2017-2018 Vasily Khoruzhick <anarsoul@gmail.com>
54 static int sunxi_pwm_set_invert(struct udevice *dev, uint channel, in sunxi_pwm_set_invert() argument
57 struct sunxi_pwm_priv *priv = dev_get_priv(dev); in sunxi_pwm_set_invert()
60 priv->invert = polarity; in sunxi_pwm_set_invert()
65 static int sunxi_pwm_set_config(struct udevice *dev, uint channel, in sunxi_pwm_set_config() argument
68 struct sunxi_pwm_priv *priv = dev_get_priv(dev); in sunxi_pwm_set_config()
69 struct sunxi_pwm *regs = priv->regs; in sunxi_pwm_set_config()
85 if ((period - 1 <= SUNXI_PWM_CH0_PERIOD_MAX) && in sunxi_pwm_set_config()
93 if (best_period - 1 > SUNXI_PWM_CH0_PERIOD_MAX) { in sunxi_pwm_set_config()
95 return -EINVAL; in sunxi_pwm_set_config()
100 if (priv->prescaler != best_prescaler) { in sunxi_pwm_set_config()
102 v = readl(®s->ctrl); in sunxi_pwm_set_config()
104 writel(v, ®s->ctrl); in sunxi_pwm_set_config()
107 writel(v, ®s->ctrl); in sunxi_pwm_set_config()
109 writel(v, ®s->ctrl); in sunxi_pwm_set_config()
110 priv->prescaler = best_prescaler; in sunxi_pwm_set_config()
114 SUNXI_PWM_CH0_PERIOD_DUTY(duty), ®s->ch0_period); in sunxi_pwm_set_config()
117 __func__, priv->prescaler, in sunxi_pwm_set_config()
123 static int sunxi_pwm_set_enable(struct udevice *dev, uint channel, bool enable) in sunxi_pwm_set_enable() argument
125 struct sunxi_pwm_priv *priv = dev_get_priv(dev); in sunxi_pwm_set_enable()
126 struct sunxi_pwm *regs = priv->regs; in sunxi_pwm_set_enable()
129 debug("%s: Enable '%s'\n", __func__, dev->name); in sunxi_pwm_set_enable()
131 v = readl(®s->ctrl); in sunxi_pwm_set_enable()
134 writel(v, ®s->ctrl); in sunxi_pwm_set_enable()
140 if (priv->invert) in sunxi_pwm_set_enable()
145 writel(v, ®s->ctrl); in sunxi_pwm_set_enable()
150 static int sunxi_pwm_ofdata_to_platdata(struct udevice *dev) in sunxi_pwm_ofdata_to_platdata() argument
152 struct sunxi_pwm_priv *priv = dev_get_priv(dev); in sunxi_pwm_ofdata_to_platdata()
154 priv->regs = (struct sunxi_pwm *)devfdt_get_addr(dev); in sunxi_pwm_ofdata_to_platdata()
159 static int sunxi_pwm_probe(struct udevice *dev) in sunxi_pwm_probe() argument
171 { .compatible = "allwinner,sun5i-a13-pwm" },
172 { .compatible = "allwinner,sun50i-a64-pwm" },