08 Aug, 2019

1 commit

  • Commit 4a6ef8e37c4d ("pwm: Add support referencing PWMs from ACPI")
    made pwm_get unconditionally return the acpi_pwm_get return value if
    the device passed to pwm_get has an ACPI fwnode.

    But even if the passed in device has an ACPI fwnode, it does not
    necessarily have the necessary ACPI package defining its pwm bindings,
    especially since the binding / API of this ACPI package has only been
    introduced very recently.

    Up until now X86/ACPI devices which use a separate pwm controller for
    controlling their LCD screen's backlight brightness have been relying
    on the static lookup-list to get their pwm.

    pwm_get unconditionally returning the acpi_pwm_get return value breaks
    this, breaking backlight control on these devices.

    This commit fixes this by making pwm_get fall back to the static
    lookup-list if acpi_pwm_get returns -ENOENT.

    BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=96571
    Reported-by: youling257@gmail.com
    Fixes: 4a6ef8e37c4d ("pwm: Add support referencing PWMs from ACPI")
    Cc: Nikolaus Voss
    Signed-off-by: Hans de Goede
    Reviewed-by: Andy Shevchenko
    Acked-by: Nikolaus Voss
    Signed-off-by: Thierry Reding

    Hans de Goede
     

09 Jul, 2019

1 commit

  • …erry.reding/linux-pwm

    Pull pwm updates from Thierry Reding:
    "This set of changes contains a new driver for SiFive SoCs as well as
    enhancements to the core (device links are used to track dependencies
    between PWM providers and consumers, support for PWM controllers via
    ACPI, sysfs will now suspend/resume PWMs that it has claimed) and
    various existing drivers"

    * tag 'pwm/for-5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/thierry.reding/linux-pwm: (37 commits)
    pwm: fsl-ftm: Make sure to unlock mutex on failure
    pwm: fsl-ftm: Use write protection for prescaler & polarity
    pwm: fsl-ftm: More relaxed permissions for updating period
    pwm: atmel-hlcdc: Add compatible for SAM9X60 HLCDC's PWM
    pwm: bcm2835: Improve precision of PWM
    leds: pwm: Support ACPI via firmware-node framework
    pwm: Add support referencing PWMs from ACPI
    pwm: rcar: Remove suspend/resume support
    pwm: sysfs: Add suspend/resume support
    pwm: Add power management descriptions
    pwm: meson: Add documentation to the driver
    pwm: meson: Add support PWM_POLARITY_INVERSED when disabling
    pwm: meson: Don't cache struct pwm_state internally
    pwm: meson: Read the full hardware state in meson_pwm_get_state()
    pwm: meson: Simplify the calculation of the pre-divider and count
    pwm: meson: Move pwm_set_chip_data() to meson_pwm_request()
    pwm: meson: Add the per-channel register offsets and bits in a struct
    pwm: meson: Add the meson_pwm_channel data to struct meson_pwm
    pwm: meson: Pass struct pwm_device to meson_pwm_calc()
    pwm: meson: Don't duplicate the polarity internally
    ...

    Linus Torvalds
     

26 Jun, 2019

23 commits

  • Upon failure to enable clocks while trying to enable the PWM, make sure
    to unlock the mutex that was taken to avoid a deadlock during subsequent
    operations.

    Reported-by: kbuild test robot
    Reported-by: Julia Lawall
    Cc: Patrick Havelange
    Signed-off-by: Thierry Reding

    Thierry Reding
     
  • Modifying the prescaler or polarity value must be done with the
    write protection disabled. Currently this is working by chance as
    the write protection is in a disabled state by default.
    This patch makes sure that we enable/disable the write protection
    when needed.

    Signed-off-by: Patrick Havelange
    Signed-off-by: Thierry Reding

    Patrick Havelange
     
  • The Flextimer has only one period for several channels. The PWM
    subsystem doesn't allow to model something like that. The current
    implementation simply disallows changing the period once it has
    been set, having as a side effect that you need to enable and
    disable the PWM if you want to change the period.

    The driver should allow as much freedom as possible for configuring
    the period and duty cycle. Therefore, this patch reworks the code
    to allow the following:

    - period and duty_cycle can be set at will when the PWM is disabled;
    - when enabling a PWM, verify that the period is either not set yet,
    or the same as the other already enabled PWM(s), and fail if not;
    - allow to change the period on the fly when the PWM is the only one
    enabled.

    It also allows to have different periods configured for different PWMs.
    Only one period can be used at a time, thus the first PWM to be enabled
    will set that period, only other PWMs with that same period can be
    enabled at the same time. To use another PWM with another period, the
    enabled PWMs must be disabled first.

    Example scenario :
    echo 5000000 > pwm0/period #OK
    echo 1000000 > pwm0/duty_cycle #OK
    echo 1000000 > pwm1/period #OK
    echo 1000000 > pwm1/duty_cycle #OK
    echo 1 > pwm0/enable #OK
    echo 1 > pwm1/enable #FAIL (pwm0/period != pwm1/period)
    echo 0 > pwm0/enable #OK
    echo 1 > pwm1/enable #OK
    echo 1000000 > pwm0/period #OK
    echo 2000000 > pwm0/period #OK
    echo 1 > pwm0/enable #FAIL (pwm0/period != pwm1/period)
    echo 2000000 > pwm1/period #OK (pwm1 still running, changed on the fly)
    echo 1 > pwm0/enable #OK (now pwm0/period == pwm1/period)
    echo 3000000 > pwm1/period #FAIL (other PWMs running)
    echo 0 > pwm0/enable #OK
    echo 3000000 > pwm1/period #OK (only this PWM running)

    Adapting the code to satisfy these constraints turned up a number of
    additional issues with the current implementation:
    - the prescaler value 0 was not used (when it could have been);
    - when setting the period was not possible, the internal state was
    inconsistent;
    - the maximal value for configuring the period was never used;

    Since all of these interact with each other, rather than trying to fix
    each individual issue, this patch reworks how the period and duty cycle
    are set entirely, with the following additional improvements:
    - implement the new apply() method instead of the individual methods;
    - return the exact used period/duty_cycle values;
    - more coherent argument types for period, duty_cycle;

    Signed-off-by: Patrick Havelange
    Signed-off-by: Thierry Reding

    Patrick Havelange
     
  • Add compatible string for SAM9X60 HLCDC's PWM.

    Signed-off-by: Claudiu Beznea
    Signed-off-by: Thierry Reding

    Claudiu Beznea
     
  • If sending IR with carrier of 455kHz using the pwm-ir-tx driver, the
    carrier ends up being 476kHz. The clock is set to bcm2835-pwm with a
    rate of 10MHz.

    A carrier of 455kHz has a period of 2198ns, but the arithmetic truncates
    this to 2100ns rather than 2200ns. So, use DIV_ROUND_CLOSEST() to reduce
    rounding errors, and we have a much more accurate carrier of 454.5kHz.

    Reported-by: Andreas Christ
    Signed-off-by: Sean Young
    Acked-by: Stefan Wahren
    Signed-off-by: Thierry Reding

    Sean Young
     
  • In analogy to referencing a GPIO using the "gpios" property from ACPI,
    support referencing a PWM using the "pwms" property.

    ACPI entries must look like
    Package () {"pwms", Package ()
    { , , [, ]}}

    In contrast to the DT implementation, only _one_ PWM entry in the "pwms"
    property is supported. As a consequence "pwm-names"-property and
    con_id lookup aren't supported.

    Support for ACPI is added via the firmware-node framework which is an
    abstraction layer on top of ACPI/DT. To keep this patch clean, DT and
    ACPI paths are kept separate. The firmware-node framework could be used
    to unify both paths in a future patch.

    To support leds-pwm driver, an additional method devm_fwnode_pwm_get()
    which supports both ACPI and DT configuration is exported.

    Signed-off-by: Nikolaus Voss
    [thierry.reding@gmail.com: fix build failures for !ACPI]
    Signed-off-by: Thierry Reding

    Nikolaus Voss
     
  • According to the Documentation/pwm.txt, all PWM consumers should
    implement power management instead of the PWM driver. So, this
    patch removes suspend/resume support.

    Signed-off-by: Yoshihiro Shimoda
    Reviewed-by: Geert Uytterhoeven
    Reviewed-by: Simon Horman
    Signed-off-by: Thierry Reding

    Yoshihiro Shimoda
     
  • According to the Documentation/pwm.txt, all PWM consumers should have
    power management. Since this sysfs interface is one of consumers so that
    this patch adds suspend/resume support.

    Signed-off-by: Yoshihiro Shimoda
    Reviewed-by: Geert Uytterhoeven
    Reviewed-by: Simon Horman
    [thierry.reding@gmail.com: fix build warnings for !PM]
    Signed-off-by: Thierry Reding

    Yoshihiro Shimoda
     
  • Add links to the datasheet and a short summary how the hardware works.
    The goal is to make it easier for other developers to understand why the
    pwm-meson driver is implemented the way it is.

    Suggested-by: Uwe Kleine-König
    Co-authored-by: Neil Armstrong
    Reviewed-by: Neil Armstrong
    Signed-off-by: Martin Blumenstingl
    Signed-off-by: Thierry Reding

    Martin Blumenstingl
     
  • meson_pwm_apply() has to consider the PWM polarity when disabling the
    output.
    With enabled=false and polarity=PWM_POLARITY_NORMAL the output needs to
    be LOW. The driver already supports this.
    With enabled=false and polarity=PWM_POLARITY_INVERSED the output needs
    to be HIGH. Implement this in the driver by internally enabling the
    output with the same settings that we already use for "period == duty".

    This fixes a PWM API violation which expects that the driver honors the
    polarity also for enabled=false. Due to the IP block not supporting this
    natively we only get "an as close as possible" to 100% HIGH signal (in
    my test setup with input clock of 24MHz and measuring the output with a
    logic analyzer at 24MHz sampling rate I got a duty cycle of 99.998475%
    on a Khadas VIM).

    Reviewed-by: Neil Armstrong
    Signed-off-by: Martin Blumenstingl
    Signed-off-by: Thierry Reding

    Martin Blumenstingl
     
  • The PWM core already caches the "current struct pwm_state" as the
    "current state of the hardware registers" inside struct pwm_device.

    Drop the struct pwm_state from struct meson_pwm_channel in favour of the
    struct pwm_state in struct pwm_device. While here also drop any checks
    based on the pwm_state because the PWM core already takes care of this.

    No functional changes intended.

    Reviewed-by: Neil Armstrong
    Signed-off-by: Martin Blumenstingl
    Signed-off-by: Thierry Reding

    Martin Blumenstingl
     
  • Update the meson_pwm_get_state() implementation to take care of all
    information in the registers instead of only reading the "enabled"
    state.

    The PWM output is only enabled if two conditions are met:
    1. the per-channel clock is enabled
    2. the PWM output is enabled

    Calculate the PWM period and duty cycle using the reverse formula which
    we already have in meson_pwm_calc() and update struct pwm_state with the
    results.

    As result of this /sys/kernel/debug/pwm now shows the PWM state set by
    the bootloader (or firmware) after booting Linux.

    Reviewed-by: Neil Armstrong
    Signed-off-by: Martin Blumenstingl
    Signed-off-by: Thierry Reding

    Martin Blumenstingl
     
  • Replace the loop to calculate the pre-divider and count with two
    separate div64_u64() calculations. This makes the code easier to read
    and improves the precision.

    Three example cases:
    1) 32.768kHz LPO clock for the SDIO wifi chip on Khadas VIM
    clock input: 500MHz (FCLK_DIV4)
    period: 30518ns
    duty cycle: 15259ns
    old algorithm: pre_div=0, cnt=15259
    new algorithm: pre_div=0, cnt=15259
    (no difference in calculated values)

    2) PWM LED on Khadas VIM
    clock input: 24MHz (XTAL)
    period: 7812500ns
    duty cycle: 7812500ns
    old algorithm: pre_div=2, cnt=62004
    new algorithm: pre_div=2, cnt=62500
    Using a scope (24MHz sampling rate) shows the actual difference:
    - old: 7753000ns, off by -59500ns (0.7616%)
    - new: 7815000ns, off by +2500ns (0.032%)

    3) Theoretical case where pre_div is different
    clock input: 24MHz (XTAL)
    period: 2730624ns
    duty cycle: 1365312ns
    old algorithm: pre_div=1, cnt=32768
    new algorithm: pre_div=0, cnt=65534
    Using a scope (24MHz sampling rate) shows the actual difference:
    - old: 2731000ns
    - new: 2731000ns
    (my scope is not precise enough to measure the difference if there's
    any)

    Suggested-by: Uwe Kleine-König
    Acked-by: Uwe Kleine-König
    Reviewed-by: Neil Armstrong
    Signed-off-by: Martin Blumenstingl
    Signed-off-by: Thierry Reding

    Martin Blumenstingl
     
  • All existing PWM drivers (except pwm-meson and two other ones) call
    pwm_set_chip_data() from their pwm_ops.request() callback. Now that we
    can access the struct meson_pwm_channel from struct meson_pwm we can do
    the same.

    Move the call to pwm_set_chip_data() to meson_pwm_request() and drop the
    custom meson_pwm_add_channels(). This makes the implementation
    consistent with other drivers and makes it slightly more obvious
    thatpwm_get_chip_data() cannot be used from pwm_ops.get_state() (because
    that's called by the PWM core before pwm_ops.request()).

    No functional changes intended.

    Reviewed-by: Neil Armstrong
    Signed-off-by: Martin Blumenstingl
    Signed-off-by: Thierry Reding

    Martin Blumenstingl
     
  • Introduce struct meson_pwm_channel_data which contains the per-channel
    offsets for the PWM register and REG_MISC_AB bits. Replace the existing
    switch (pwm->hwpwm) statements with an access to the new struct.

    This simplifies the code and will make it easier to implement
    pwm_ops.get_state() because the switch-case which all per-channel
    registers and offsets (as previously implemented in meson_pwm_enable())
    doesn't have to be duplicated.

    No functional changes intended.

    Reviewed-by: Neil Armstrong
    Signed-off-by: Martin Blumenstingl
    Signed-off-by: Thierry Reding

    Martin Blumenstingl
     
  • Make struct meson_pwm_channel accessible from struct meson_pwm.

    PWM core has a limitation: per-channel data can only be set after
    pwmchip_add() is called. However, pwmchip_add() internally calls
    pwm_ops.get_state(). If pwm_ops.get_state() needs access to the
    per-channel data it has to obtain it from struct pwm_chip and struct
    pwm_device's hwpwm information.

    Add a struct meson_pwm_channel for each PWM channel to struct meson_pwm
    so the pwm_ops.get_state() callback can be implemented as it needs
    access to the clock from struct meson_pwm_channel.

    Reviewed-by: Neil Armstrong
    Signed-off-by: Martin Blumenstingl
    Signed-off-by: Thierry Reding

    Martin Blumenstingl
     
  • meson_pwm_calc() is the last function that accepts a struct
    meson_pwm_channel. meson_pwm_enable(), meson_pwm_disable() and
    meson_pwm_apply() for example are all taking a struct pwm_device as
    parameter. When they need the struct meson_pwm_channel these functions
    simply call pwm_get_chip_data() internally.

    Make meson_pwm_calc() consistent with the other functions in the
    meson-pwm driver by passing struct pwm_device to it as well. The value
    of the "id" parameter is actually pwm->hwpwm, but the driver never read
    the "id" parameter, which is why there's no replacement for it in the
    new code.

    No functional changes.

    Reviewed-by: Neil Armstrong
    Signed-off-by: Martin Blumenstingl
    Signed-off-by: Thierry Reding

    Martin Blumenstingl
     
  • Let meson_pwm_calc() use the polarity from struct pwm_state directly.
    This removes a level of indirection where meson_pwm_apply() first had to
    set a driver-internal inverter mask which was then only used by
    meson_pwm_calc().

    Instead of adding the polarity as parameter to meson_pwm_calc() switch
    to struct pwm_state directly to make it easier to see where the
    parameters are actually coming from.

    Reviewed-by: Neil Armstrong
    Signed-off-by: Martin Blumenstingl
    Signed-off-by: Thierry Reding

    Martin Blumenstingl
     
  • MISC_CLK_SEL_WIDTH is only used in one place where it's converted into
    a bit-mask. Rename and change the macro to be a bit-mask so that
    conversion is not needed anymore. No functional changes intended.

    Reviewed-by: Neil Armstrong
    Signed-off-by: Martin Blumenstingl
    Signed-off-by: Thierry Reding

    Martin Blumenstingl
     
  • meson_pwm_calc() ensures that "lo" is always less than 16 bits wide
    (otherwise it would overflow into the "hi" part of the REG_PWM_{A,B}
    register).
    Use GENMASK and FIELD_PREP for the lo and hi values to make it easier to
    spot how wide these are internally. Additionally this is a preparation
    step for the .get_state() implementation where the GENMASK() for lo and
    hi becomes handy because it can be used with FIELD_GET() to extract the
    values from the register REG_PWM_{A,B} register.

    No functional changes intended.

    Reviewed-by: Neil Armstrong
    Reviewed-by: Uwe Kleine-König
    Signed-off-by: Martin Blumenstingl
    Signed-off-by: Thierry Reding

    Martin Blumenstingl
     
  • Simplify the code which fetches the input clock for a PWM channel by
    using devm_clk_get_optional().
    This comes with a small functional change: previously all errors except
    EPROBE_DEFER were ignored. Now all other errors are also treated as
    errors. If no input clock is present devm_clk_get_optional() will return
    NULL instead of an error which matches the behavior of the old code.

    Reviewed-by: Neil Armstrong
    Reviewed-by: Uwe Kleine-König
    Signed-off-by: Martin Blumenstingl
    Signed-off-by: Thierry Reding

    Martin Blumenstingl
     
  • This is a preparation for a future cleanup. Pass struct pwm_device
    instead of passing the individual values required by each function as
    these can be obtained for each struct pwm_device instance.

    As a nice side-effect the driver now uses "switch (pwm->hwpwm)"
    everywhere. Before some functions used "switch (id)" while others used
    "switch (pwm->hwpwm)".

    No functional changes.

    Reviewed-by: Neil Armstrong
    Reviewed-by: Uwe Kleine-König
    Signed-off-by: Martin Blumenstingl
    Signed-off-by: Thierry Reding

    Martin Blumenstingl
     
  • When the PWM mode of TCU2 channels is disabled, their corresponding pin
    does not always return to its initial level. Force this by using a small
    trick: we set duty > period, which is an invalid configuration for the
    hardware, which then correctly resets the pin to the initial level.

    Signed-off-by: Paul Cercueil
    Signed-off-by: Thierry Reding

    Paul Cercueil
     

25 Jun, 2019

8 commits

  • This is cleaner, more future-proof, and incidentally it also fixes the
    PWM resetting its config when stopped/started several times.

    Signed-off-by: Paul Cercueil
    Signed-off-by: Thierry Reding

    Paul Cercueil
     
  • Right now none of the Ingenic-based boards probe this driver from
    devicetree. This driver defined three compatible strings for the exact
    same behaviour. Before these strings are used, we can remove two of
    them.

    Signed-off-by: Paul Cercueil
    Signed-off-by: Thierry Reding

    Paul Cercueil
     
  • The Amlogic G12A and G12B Documentation is wrong, the AO xtal and clk81
    clock source order is reversed, and validated when adding DVFS support
    by using the PWM AO D output to control the CPU supply voltage.

    The vendor tree also uses the reversed xtal and clk81 order at [1].

    [1] https://github.com/hardkernel/linux/blob/odroidn2-4.9.y/drivers/amlogic/pwm/pwm_meson.c#L462

    Fixes: f41efceb46e6 ("pwm: meson: Add clock source configuration for Meson G12A")
    Signed-off-by: Neil Armstrong
    Acked-by: Kevin Hilman
    Signed-off-by: Thierry Reding

    Neil Armstrong
     
  • Signed-off-by: Neil Armstrong
    Reviewed-by: Martin Blumenstingl
    Signed-off-by: Thierry Reding

    Neil Armstrong
     
  • STM32 Timers support generic 3 cells PWM to encode PWM number, period
    and polarity.

    Fixes: 7edf7369205b ("pwm: Add driver for STM32 plaftorm")
    Signed-off-by: Fabrice Gasnier
    Reviewed-by: Benjamin Gaignard
    Signed-off-by: Thierry Reding

    Fabrice Gasnier
     
  • Add a device link between the PWM consumer and the PWM provider. This
    enforces the PWM user to get suspended before the PWM provider. It
    allows proper synchronization of suspend/resume sequences: the PWM user
    is responsible for properly stopping PWM, before the provider gets
    suspended: see [1]. Add the device link in:
    - of_pwm_get()
    - pwm_get()
    - devm_*pwm_get() variants
    as it requires a reference to the device for the PWM consumer.

    [1] https://lkml.org/lkml/2019/2/5/770

    Suggested-by: Thierry Reding
    Acked-by: Uwe Kleine-König
    Signed-off-by: Fabrice Gasnier
    Signed-off-by: Thierry Reding

    Fabrice Gasnier
     
  • Add suspend/resume PM sleep ops. When going to low power, enforce the PWM
    channel isn't active. Let the PWM consumers disable it during their own
    suspend sequence. Only perform a check here, and handle the pinctrl states.
    See [1].
    [1] https://lkml.org/lkml/2019/2/5/770

    Signed-off-by: Fabrice Gasnier
    Signed-off-by: Thierry Reding

    Fabrice Gasnier
     
  • Adds a PWM driver for PWM chip present in SiFive's HiFive Unleashed SoC.

    Signed-off-by: Wesley W. Terpstra
    [Atish: Various fixes and code cleanup]
    Signed-off-by: Atish Patra
    Signed-off-by: Yash Shah
    Reviewed-by: Uwe Kleine-König
    Signed-off-by: Thierry Reding

    Yash Shah
     

19 Jun, 2019

2 commits

  • Based on 2 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation #

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 4122 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Enrico Weigelt
    Reviewed-by: Kate Stewart
    Reviewed-by: Allison Randal
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190604081206.933168790@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     
  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation this program is
    distributed in the hope that it will be useful but without any
    warranty without even the implied warranty of merchantability or
    fitness for a particular purpose see the gnu general public license
    for more details you should have received a copy of the gnu general
    public license along with this program if not see http www gnu org
    licenses

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 503 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Alexios Zavras
    Reviewed-by: Allison Randal
    Reviewed-by: Enrico Weigelt
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190602204653.811534538@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

05 Jun, 2019

2 commits

  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license as published by
    the free software foundation version 2

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 135 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Allison Randal
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190531081036.435762997@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     
  • Based on 1 normalized pattern(s):

    this software is licensed under the terms of the gnu general public
    license version 2 as published by the free software foundation and
    may be copied distributed and modified under those terms this
    program is distributed in the hope that it will be useful but
    without any warranty without even the implied warranty of
    merchantability or fitness for a particular purpose see the gnu
    general public license for more details

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 285 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Alexios Zavras
    Reviewed-by: Allison Randal
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190529141900.642774971@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

31 May, 2019

3 commits

  • Based on 1 normalized pattern(s):

    license terms gnu general public license gpl version 2

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 161 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Allison Randal
    Reviewed-by: Alexios Zavras
    Reviewed-by: Steve Winslow
    Reviewed-by: Richard Fontana
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190528170027.447718015@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     
  • Based on 1 normalized pattern(s):

    licensed under gplv2

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 99 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Alexios Zavras
    Reviewed-by: Richard Fontana
    Reviewed-by: Allison Randal
    Reviewed-by: Steve Winslow
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190528170027.163048684@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     
  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license as published by
    the free software foundation either version 2 of the license

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 24 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Alexios Zavras
    Reviewed-by: Steve Winslow
    Reviewed-by: Allison Randal
    Reviewed-by: Richard Fontana
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190528170026.162703968@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner