10 Feb, 2014

1 commit

  • Before we had the PWM framework we used to have a barebone PWM api. The
    HAVE_PWM Kconfig symbol used to be selected by the PWM drivers to specify
    the PWM API is present in the kernel. Since the last legacy driver is gone
    the HAVE_PWM symbol can go aswell.

    Signed-off-by: Sascha Hauer
    Cc: Dmitry Torokhov
    Cc: Eric Miao
    Cc: Haojian Zhuang
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: linux-kernel@vger.kernel.org
    Cc: Thierry Reding
    Cc: linux-pwm@vger.kernel.orig
    Cc: Russell King
    Cc: Ralf Baechle
    Signed-off-by: Thierry Reding

    Sascha Hauer
     

21 Jun, 2013

1 commit

  • Add a simple sysfs interface to the generic PWM framework.

    /sys/class/pwm/
    `-- pwmchipN/ for each PWM chip
    |-- export (w/o) ask the kernel to export a PWM channel
    |-- npwm (r/o) number of PWM channels in this PWM chip
    |-- pwmX/ for each exported PWM channel
    | |-- duty_cycle (r/w) duty cycle (in nanoseconds)
    | |-- enable (r/w) enable/disable PWM
    | |-- period (r/w) period (in nanoseconds)
    | `-- polarity (r/w) polarity of PWM (normal/inversed)
    `-- unexport (w/o) return a PWM channel to the kernel

    Based on work by Lars Poeschel.

    Signed-off-by: H Hartley Sweeten
    Cc: Thierry Reding
    Cc: Lars Poeschel
    Cc: Ryan Mallon
    Cc: Rob Landley
    Signed-off-by: Thierry Reding

    H Hartley Sweeten
     

27 Feb, 2013

1 commit

  • Pull PWM changes from Thierry Reding:
    "A new driver has been added to support the PWM mode of the timer
    counter blocks found on Atmel AT91 SoCs. The VT8500 driver now
    supports changing the PWM signal polarity and the TI drivers (EHRPWM
    and ECAP) gained suspend and resume functionality.

    User drivers can now query the core for whether access to a PWM device
    will sleep (if the PWM chip is on a slow bus such as I2C or SPI).

    The pwm-backlight driver now handles the backlight BL_CORE_FBBLANK
    state in addition to the FB layer's blanking states.

    To round things off, a few fixes and cleanups are also included"

    * tag 'for-3.9-rc1' of git://gitorious.org/linux-pwm/linux-pwm:
    pwm: twl: Use to_twl() instead of container_of()
    pwm: tegra: assume CONFIG_OF
    pwm_backlight: Validate dft_brightness in main probe function
    pwm: Export pwm_{set,get}_chip_data()
    pwm: Make Kconfig entries more consistent
    pwm: Add can_sleep property to drivers
    pwm: Add pwm_can_sleep() as exported API to users
    pwm-backlight: handle BL_CORE_FBBLANK state
    pwm: pwm-tiecap: Low power sleep support
    pwm: pwm-tiehrpwm: Low power sleep support
    pwm: pwm-tiehrpwm: Update the clock handling of pwm-tiehrpwm driver
    pwm: vt8500: Add polarity support
    pwm: vt8500: Register write busy test performed incorrectly
    pwm: atmel: add Timer Counter Block PWM driver

    Linus Torvalds
     

02 Feb, 2013

3 commits


30 Jan, 2013

1 commit


23 Nov, 2012

1 commit

  • Add support for encoding PWM properties in bit encoded form with
    of_pwm_xlate_with_flags() function support. Platforms require platform
    specific PWM properties has to populate in 3rd cell of the pwm-specifier
    and PWM driver should also set .of_xlate support with this function.
    Currently PWM property polarity encoded in bit position 0 of the third
    cell in pwm-specifier.

    Signed-off-by: Philip, Avinash
    Acked-by: Grant Likely
    Signed-off-by: Thierry Reding

    Philip, Avinash
     

20 Sep, 2012

1 commit


10 Sep, 2012

2 commits

  • Add resource managed variants of pwm_get() and pwm_put() for
    convenience. Code is largely inspired by the equivalent devm functions
    of the regulator framework.

    Signed-off-by: Alexandre Courbot
    Signed-off-by: Thierry Reding

    Alexandre Courbot
     
  • Some hardware supports inverting the polarity of the PWM signal. This
    commit adds support to the PWM framework to allow users of the PWM API
    to configure the polarity. Note that in order to reduce complexity,
    changing the polarity of a PWM signal is only allowed while the PWM is
    disabled.

    A practical example where this can prove useful is to simulate inversion
    of the duty cycle. While inversion of polarity and duty cycle are not
    exactly the same, the differences for most use-cases are negligible.

    Signed-off-by: Philip, Avinash
    Signed-off-by: Thierry Reding

    Philip, Avinash
     

15 Jun, 2012

5 commits

  • This patch adds helpers to support device tree bindings for the generic
    PWM API. Device tree binding documentation for PWM controllers is also
    provided.

    Acked-by: Arnd Bergmann
    Reviewed-by: Shawn Guo
    Signed-off-by: Thierry Reding

    Thierry Reding
     
  • In order to get rid of the global namespace for PWM devices, this commit
    provides an alternative method, similar to that of the regulator or
    clock frameworks, for registering a static mapping for PWM devices. This
    works by providing a table with a provider/consumer map in the board
    setup code.

    With the new pwm_get() and pwm_put() functions available, usage of
    pwm_request() and pwm_free() becomes deprecated.

    Reviewed-by: Shawn Guo
    Reviewed-by: Mark Brown
    Signed-off-by: Thierry Reding

    Thierry Reding
     
  • This commit adds a debugfs interface that can be used to list the
    current internal state of the PWM devices registered with the PWM
    framework.

    Reviewed-by: Mark Brown
    Reviewed-by: Shawn Guo
    Signed-off-by: Thierry Reding

    Thierry Reding
     
  • Many PWM controllers provide access to more than a single PWM output and
    may even share some resource among them. Allowing a PWM chip to provide
    multiple PWM devices enables better sharing of those resources. As a
    side-effect this change allows easy integration with the device tree
    where a given PWM can be looked up based on the PWM chip's phandle and a
    corresponding index.

    This commit modifies the PWM core to support multiple PWMs per struct
    pwm_chip. It achieves this in a similar way to how gpiolib works, by
    allowing PWM ranges to be requested dynamically (pwm_chip.base == -1) or
    starting at a given offset (pwm_chip.base >= 0). A chip specifies how
    many PWMs it controls using the npwm member. Each of the functions in
    the pwm_ops structure gets an additional argument that specified the PWM
    number (it can be converted to a per-chip index by subtracting the
    chip's base).

    The total maximum number of PWM devices is currently fixed to 1024 while
    the data is actually stored in a radix tree, thus saving resources if
    not all of them are used.

    Reviewed-by: Mark Brown
    Reviewed-by: Shawn Guo
    [eric@eukrea.com: fix error handling in pwmchip_add]
    Signed-off-by: Eric Bénard
    Signed-off-by: Thierry Reding

    Thierry Reding
     
  • This patch adds framework support for PWM (pulse width modulation) devices.

    The is a barebone PWM API already in the kernel under include/linux/pwm.h,
    but it does not allow for multiple drivers as each of them implements the
    pwm_*() functions.

    There are other PWM framework patches around from Bill Gatliff. Unlike
    his framework this one does not change the existing API for PWMs so that
    this framework can act as a drop in replacement for the existing API.

    Why another framework?

    Several people argue that there should not be another framework for PWMs
    but they should be integrated into one of the existing frameworks like led
    or hwmon. Unlike these frameworks the PWM framework is agnostic to the
    purpose of the PWM. In fact, a PWM can drive a LED, but this makes the
    LED framework a user of a PWM, like already done in leds-pwm.c. The gpio
    framework also is not suitable for PWMs. Every gpio could be turned into
    a PWM using timer based toggling, but on the other hand not every PWM hardware
    device can be turned into a gpio due to the lack of hardware capabilities.

    This patch does not try to improve the PWM API yet, this could be done in
    subsequent patches.

    Signed-off-by: Sascha Hauer
    Acked-by: Kurt Van Dijck
    Reviewed-by: Arnd Bergmann
    Reviewed-by: Matthias Kaehlcke
    Reviewed-by: Mark Brown
    Reviewed-by: Shawn Guo
    [thierry.reding@avionic-design.de: fixup typos, kerneldoc comments]
    Signed-off-by: Thierry Reding

    Sascha Hauer
     

30 Mar, 2009

1 commit


19 May, 2008

1 commit