Skip to content

Commit

Permalink
Merge tag 'pwm/for-3.17-rc1' of git://git.kernel.org/pub/scm/linux/ke…
Browse files Browse the repository at this point in the history
…rnel/git/thierry.reding/linux-pwm

Pull pwm changes from Thierry Reding:
 "The set of changes for this merge window contains two new drivers: one
  for Rockchip SoCs and another for STMicroelectronics STiH4xx SoCs.

  The remainder of the changes are the usual small cleanups such as
  removing redundant OOM messages, signalling that a PWM chip's
  operations can sleep and removing an unneeded dependency"

* tag 'pwm/for-3.17-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/thierry.reding/linux-pwm:
  pwm: rockchip: Added to support for RK3288 SoC
  pwm: rockchip: document RK3288 SoC compatible
  pwm: sti: Remove PWM period table
  pwm: sti: Sync between enable/disable calls
  pwm: sti: Ensure same period values for all channels
  pwm: sti: Fix PWM prescaler handling
  pwm: sti: Supply Device Tree binding documentation for ST's PWM IP
  pwm: sti: Add new driver for ST's PWM IP
  pwm: imx: set can_sleep flag for imx_pwm
  pwm: lpss: remove dependency on clk framework
  pwm: pwm-tipwmss: remove unnecessary OOM messages
  pwm: rockchip: document device tree bindings
  pwm: add Rockchip SoC PWM support
  • Loading branch information
Linus Torvalds committed Aug 9, 2014
2 parents 06b49ea + f630629 commit 34b20e6
Show file tree
Hide file tree
Showing 9 changed files with 774 additions and 25 deletions.
20 changes: 20 additions & 0 deletions Documentation/devicetree/bindings/pwm/pwm-rockchip.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
Rockchip PWM controller

Required properties:
- compatible: should be "rockchip,<name>-pwm"
"rockchip,rk2928-pwm": found on RK29XX,RK3066 and RK3188 SoCs
"rockchip,rk3288-pwm": found on RK3288 SoC
"rockchip,vop-pwm": found integrated in VOP on RK3288 SoC
- reg: physical base address and length of the controller's registers
- clocks: phandle and clock specifier of the PWM reference clock
- #pwm-cells: should be 2. See pwm.txt in this directory for a
description of the cell format.

Example:

pwm0: pwm@20030000 {
compatible = "rockchip,rk2928-pwm";
reg = <0x20030000 0x10>;
clocks = <&cru PCLK_PWM01>;
#pwm-cells = <2>;
};
41 changes: 41 additions & 0 deletions Documentation/devicetree/bindings/pwm/pwm-st.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
STMicroelectronics PWM driver bindings
--------------------------------------

Required parameters:
- compatible : "st,pwm"
- #pwm-cells : Number of cells used to specify a PWM. First cell
specifies the per-chip index of the PWM to use and the
second cell is the period in nanoseconds - fixed to 2
for STiH41x.
- reg : Physical base address and length of the controller's
registers.
- pinctrl-names: Set to "default".
- pinctrl-0: List of phandles pointing to pin configuration nodes
for PWM module.
For Pinctrl properties, please refer to [1].
- clock-names: Set to "pwm".
- clocks: phandle of the clock used by the PWM module.
For Clk properties, please refer to [2].

Optional properties:
- st,pwm-num-chan: Number of available channels. If not passed, the driver
will consider single channel by default.

[1] Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
[2] Documentation/devicetree/bindings/clock/clock-bindings.txt

Example:

pwm1: pwm@fe510000 {
compatible = "st,pwm";
reg = <0xfe510000 0x68>;
#pwm-cells = <2>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm1_chan0_default
&pinctrl_pwm1_chan1_default
&pinctrl_pwm1_chan2_default
&pinctrl_pwm1_chan3_default>;
clocks = <&clk_sysin>;
clock-names = "pwm";
st,pwm-num-chan = <4>;
};
17 changes: 17 additions & 0 deletions drivers/pwm/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,13 @@ config PWM_RENESAS_TPU
To compile this driver as a module, choose M here: the module
will be called pwm-renesas-tpu.

config PWM_ROCKCHIP
tristate "Rockchip PWM support"
depends on ARCH_ROCKCHIP
help
Generic PWM framework driver for the PWM controller found on
Rockchip SoCs.

config PWM_SAMSUNG
tristate "Samsung PWM support"
depends on PLAT_SAMSUNG
Expand All @@ -226,6 +233,16 @@ config PWM_SPEAR
To compile this driver as a module, choose M here: the module
will be called pwm-spear.

config PWM_STI
tristate "STiH4xx PWM support"
depends on ARCH_STI
depends on OF
help
Generic PWM framework driver for STiH4xx SoCs.

To compile this driver as a module, choose M here: the module
will be called pwm-sti.

config PWM_TEGRA
tristate "NVIDIA Tegra PWM support"
depends on ARCH_TEGRA
Expand Down
2 changes: 2 additions & 0 deletions drivers/pwm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ obj-$(CONFIG_PWM_PCA9685) += pwm-pca9685.o
obj-$(CONFIG_PWM_PUV3) += pwm-puv3.o
obj-$(CONFIG_PWM_PXA) += pwm-pxa.o
obj-$(CONFIG_PWM_RENESAS_TPU) += pwm-renesas-tpu.o
obj-$(CONFIG_PWM_ROCKCHIP) += pwm-rockchip.o
obj-$(CONFIG_PWM_SAMSUNG) += pwm-samsung.o
obj-$(CONFIG_PWM_SPEAR) += pwm-spear.o
obj-$(CONFIG_PWM_STI) += pwm-sti.o
obj-$(CONFIG_PWM_TEGRA) += pwm-tegra.o
obj-$(CONFIG_PWM_TIECAP) += pwm-tiecap.o
obj-$(CONFIG_PWM_TIEHRPWM) += pwm-tiehrpwm.o
Expand Down
1 change: 1 addition & 0 deletions drivers/pwm/pwm-imx.c
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,7 @@ static int imx_pwm_probe(struct platform_device *pdev)
imx->chip.dev = &pdev->dev;
imx->chip.base = -1;
imx->chip.npwm = 1;
imx->chip.can_sleep = true;

r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
imx->mmio_base = devm_ioremap_resource(&pdev->dev, r);
Expand Down
32 changes: 10 additions & 22 deletions drivers/pwm/pwm-lpss.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
*/

#include <linux/acpi.h>
#include <linux/clk.h>
#include <linux/device.h>
#include <linux/kernel.h>
#include <linux/module.h>
Expand All @@ -37,7 +36,6 @@ static int pci_drv, plat_drv; /* So we know which drivers registered */
struct pwm_lpss_chip {
struct pwm_chip chip;
void __iomem *regs;
struct clk *clk;
unsigned long clk_rate;
};

Expand Down Expand Up @@ -97,11 +95,6 @@ static int pwm_lpss_enable(struct pwm_chip *chip, struct pwm_device *pwm)
{
struct pwm_lpss_chip *lpwm = to_lpwm(chip);
u32 ctrl;
int ret;

ret = clk_prepare_enable(lpwm->clk);
if (ret)
return ret;

ctrl = readl(lpwm->regs + PWM);
writel(ctrl | PWM_ENABLE, lpwm->regs + PWM);
Expand All @@ -116,8 +109,6 @@ static void pwm_lpss_disable(struct pwm_chip *chip, struct pwm_device *pwm)

ctrl = readl(lpwm->regs + PWM);
writel(ctrl & ~PWM_ENABLE, lpwm->regs + PWM);

clk_disable_unprepare(lpwm->clk);
}

static const struct pwm_ops pwm_lpss_ops = {
Expand All @@ -142,17 +133,7 @@ static struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev,
if (IS_ERR(lpwm->regs))
return ERR_CAST(lpwm->regs);

if (info) {
lpwm->clk_rate = info->clk_rate;
} else {
lpwm->clk = devm_clk_get(dev, NULL);
if (IS_ERR(lpwm->clk)) {
dev_err(dev, "failed to get PWM clock\n");
return ERR_CAST(lpwm->clk);
}
lpwm->clk_rate = clk_get_rate(lpwm->clk);
}

lpwm->clk_rate = info->clk_rate;
lpwm->chip.dev = dev;
lpwm->chip.ops = &pwm_lpss_ops;
lpwm->chip.base = -1;
Expand Down Expand Up @@ -221,12 +202,19 @@ static struct pci_driver pwm_lpss_driver_pci = {

static int pwm_lpss_probe_platform(struct platform_device *pdev)
{
const struct pwm_lpss_boardinfo *info;
const struct acpi_device_id *id;
struct pwm_lpss_chip *lpwm;
struct resource *r;

id = acpi_match_device(pdev->dev.driver->acpi_match_table, &pdev->dev);
if (!id)
return -ENODEV;

r = platform_get_resource(pdev, IORESOURCE_MEM, 0);

lpwm = pwm_lpss_probe(&pdev->dev, r, NULL);
info = (struct pwm_lpss_boardinfo *)id->driver_data;
lpwm = pwm_lpss_probe(&pdev->dev, r, info);
if (IS_ERR(lpwm))
return PTR_ERR(lpwm);

Expand All @@ -242,7 +230,7 @@ static int pwm_lpss_remove_platform(struct platform_device *pdev)
}

static const struct acpi_device_id pwm_lpss_acpi_match[] = {
{ "80860F09", 0 },
{ "80860F09", (unsigned long)&byt_info },
{ },
};
MODULE_DEVICE_TABLE(acpi, pwm_lpss_acpi_match);
Expand Down
Loading

0 comments on commit 34b20e6

Please sign in to comment.