Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 358727
b: refs/heads/master
c: 3ccb1c1
h: refs/heads/master
i:
  358725: 86a21cf
  358723: d603ce6
  358719: a579f25
v: v3
  • Loading branch information
Tony Prisk authored and Thierry Reding committed Jan 9, 2013
1 parent bc518d6 commit ff73763
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8ab432caa46413c9f3ca81d82ea9fa5bae07c3c1
refs/heads/master: 3ccb1c1702ed4bb07006d20c8173899a69dae242
9 changes: 6 additions & 3 deletions trunk/Documentation/devicetree/bindings/pwm/vt8500-pwm.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@ VIA/Wondermedia VT8500/WM8xxx series SoC PWM controller
Required properties:
- compatible: should be "via,vt8500-pwm"
- reg: physical base address and length of the controller's registers
- #pwm-cells: should be 2. The first cell specifies the per-chip index
of the PWM to use and the second cell is the period in nanoseconds.
- #pwm-cells: Should be 3. Number of cells being used to specify PWM property.
First cell specifies the per-chip index of the PWM to use, the second
cell is the period in nanoseconds and bit 0 in the third cell is used to
encode the polarity of PWM output. Set bit 0 of the third in PWM specifier
to 1 for inverse polarity & set to 0 for normal polarity.
- clocks: phandle to the PWM source clock

Example:

pwm1: pwm@d8220000 {
#pwm-cells = <2>;
#pwm-cells = <3>;
compatible = "via,vt8500-pwm";
reg = <0xd8220000 0x1000>;
clocks = <&clkpwm>;
Expand Down
23 changes: 23 additions & 0 deletions trunk/drivers/pwm/pwm-vt8500.c
Original file line number Diff line number Diff line change
Expand Up @@ -164,10 +164,31 @@ static void vt8500_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm)
clk_disable(vt8500->clk);
}

static int vt8500_pwm_set_polarity(struct pwm_chip *chip,
struct pwm_device *pwm,
enum pwm_polarity polarity)
{
struct vt8500_chip *vt8500 = to_vt8500_chip(chip);
u32 val;

val = readl(vt8500->base + REG_CTRL(pwm->hwpwm));

if (polarity == PWM_POLARITY_INVERSED)
val |= CTRL_INVERT;
else
val &= ~CTRL_INVERT;

writel(val, vt8500->base + REG_CTRL(pwm->hwpwm));
pwm_busy_wait(vt8500, pwm->hwpwm, STATUS_CTRL_UPDATE);

return 0;
}

static struct pwm_ops vt8500_pwm_ops = {
.enable = vt8500_pwm_enable,
.disable = vt8500_pwm_disable,
.config = vt8500_pwm_config,
.set_polarity = vt8500_pwm_set_polarity,
.owner = THIS_MODULE,
};

Expand Down Expand Up @@ -197,6 +218,8 @@ static int vt8500_pwm_probe(struct platform_device *pdev)

chip->chip.dev = &pdev->dev;
chip->chip.ops = &vt8500_pwm_ops;
chip->chip.of_xlate = of_pwm_xlate_with_flags;
chip->chip.of_pwm_n_cells = 3;
chip->chip.base = -1;
chip->chip.npwm = VT8500_NR_PWMS;

Expand Down

0 comments on commit ff73763

Please sign in to comment.