1. 05 3月, 2018 1 次提交
    • G
      gpio: rcar: Use wakeup_path i.s.o. explicit clock handling · 9ac79ba9
      Geert Uytterhoeven 提交于
      Since commit ab82fa7d ("gpio: rcar: Prevent module clock disable
      when wake-up is enabled"), when a GPIO is used for wakeup, the GPIO
      block's module clock (if exists) is manually kept running during system
      suspend, to make sure the device stays active.
      
      However, this explicit clock handling is merely a workaround for a
      failure to properly communicate wakeup information to the device core.
      
      Instead, set the device's power.wakeup_path field, to indicate this
      device is part of the wakeup path.  Depending on the PM Domain's
      active_wakeup configuration, the genpd core code will keep the device
      enabled (and the clock running) during system suspend when needed.
      This allows for the removal of all explicit clock handling code from the
      driver.
      Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      9ac79ba9
  2. 27 2月, 2018 2 次提交
    • C
      gpio: Handle deferred probing in of_find_gpio() properly · ce27fb2c
      Chen-Yu Tsai 提交于
      of_get_named_gpiod_flags() used directly in of_find_gpio() or indirectly
      through of_find_spi_gpio() or of_find_regulator_gpio() can return
      -EPROBE_DEFER. This gets overwritten by the subsequent of_find_*_gpio()
      calls.
      
      This patch fixes this by trying of_find_spi_gpio() or
      of_find_regulator_gpio() only if deferred probing was not requested by
      the previous of_get_named_gpiod_flags() call.
      
      Fixes: 6a537d48 ("gpio: of: Support regulator nonstandard GPIO properties")
      Fixes: c8582339 ("gpio: of: Support SPI nonstandard GPIO properties")
      Signed-off-by: NChen-Yu Tsai <wens@csie.org>
      [Augmented to fit with Maxime's patch]
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      ce27fb2c
    • M
      gpiolib: Keep returning EPROBE_DEFER when we should · 6662ae6a
      Maxime Ripard 提交于
      Commits c8582339 ("gpio: of: Support SPI nonstandard GPIO properties")
      and 6a537d48 ("gpio: of: Support regulator nonstandard GPIO
      properties") have introduced a regression in the way error codes from
      of_get_named_gpiod_flags are handled.
      
      Previously, those errors codes were returned immediately, but the two
      commits mentioned above are now overwriting the error pointer, meaning that
      whatever value has been returned will be dropped in favor of whatever the
      two new functions will return.
      
      This might not be a big deal except for EPROBE_DEFER, on which GPIOlib
      customers will depend on, and that will now be returned as an hard error
      which means that they will not probe anymore, instead of gently deferring
      their probe.
      
      Since EPROBE_DEFER basically means that we have found a valid property but
      there was no GPIO controller registered to handle it, fix this issues by
      returning it as soon as we encounter it.
      
      Fixes: c8582339 ("gpio: of: Support SPI nonstandard GPIO properties")
      Fixes: 6a537d48 ("gpio: of: Support regulator nonstandard GPIO properties")
      Signed-off-by: NMaxime Ripard <maxime.ripard@bootlin.com>
      [Fold in fix to the fix]
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      6662ae6a
  3. 12 2月, 2018 1 次提交
    • L
      vfs: do bulk POLL* -> EPOLL* replacement · a9a08845
      Linus Torvalds 提交于
      This is the mindless scripted replacement of kernel use of POLL*
      variables as described by Al, done by this script:
      
          for V in IN OUT PRI ERR RDNORM RDBAND WRNORM WRBAND HUP RDHUP NVAL MSG; do
              L=`git grep -l -w POLL$V | grep -v '^t' | grep -v /um/ | grep -v '^sa' | grep -v '/poll.h$'|grep -v '^D'`
              for f in $L; do sed -i "-es/^\([^\"]*\)\(\<POLL$V\>\)/\\1E\\2/" $f; done
          done
      
      with de-mangling cleanups yet to come.
      
      NOTE! On almost all architectures, the EPOLL* constants have the same
      values as the POLL* constants do.  But they keyword here is "almost".
      For various bad reasons they aren't the same, and epoll() doesn't
      actually work quite correctly in some cases due to this on Sparc et al.
      
      The next patch from Al will sort out the final differences, and we
      should be all done.
      Scripted-by: NAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      a9a08845
  4. 23 1月, 2018 2 次提交
  5. 17 1月, 2018 9 次提交
    • C
      gpiolib: remove redundant initialization of pointer desc · 40a3c9db
      Colin Ian King 提交于
      The initialized value stored in pointer desc is never read as it
      is updated in the first executable statement in the function.
      This is therefore redundant and can be removed.
      
      Cleans up clang warning:
      drivers/gpio/gpiolib.c:3710:20: warning: Value stored to 'desc'
      during its initialization is never read
      Signed-off-by: NColin Ian King <colin.king@canonical.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      40a3c9db
    • L
      gpio: of: Fix NPE from OF flags · 605f2d34
      Linus Walleij 提交于
      Some calls to of_get_named_gpio() calls sets the flags
      argument to NULL because they are not interested in the
      flags. This caused a null pointer exception since we were
      unconditionally using these flags. Fix it.
      
      Fixes: 6a537d48 ("gpio: of: Support regulator nonstandard GPIO properties")
      Cc: Heiner Kallweit <hkallweit1@gmail.com>
      Reported-by: NHeiner Kallweit <hkallweit1@gmail.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      605f2d34
    • M
      gpio: stmpe: Delete an unnecessary variable initialisation in stmpe_gpio_probe() · 0f719231
      Markus Elfring 提交于
      The local variable "irq" will eventually be set to an appropriate value
      a bit later. Thus omit the explicit initialisation at the beginning.
      Signed-off-by: NMarkus Elfring <elfring@users.sourceforge.net>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      0f719231
    • M
      gpio: stmpe: Move an assignment in stmpe_gpio_probe() · 757ad058
      Markus Elfring 提交于
      Move the assignment for the local variable "irq" so that its setting
      will only be performed directly before it is checked by this function.
      Signed-off-by: NMarkus Elfring <elfring@users.sourceforge.net>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      757ad058
    • M
      gpio: stmpe: Improve a size determination in stmpe_gpio_probe() · 64fec0bc
      Markus Elfring 提交于
      Replace the specification of a data structure by a pointer dereference
      as the parameter for the operator "sizeof" to make the corresponding size
      determination a bit safer according to the Linux coding style convention.
      
      This issue was detected by using the Coccinelle software.
      Signed-off-by: NMarkus Elfring <elfring@users.sourceforge.net>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      64fec0bc
    • M
      gpio: stmpe: Use seq_putc() in stmpe_dbg_show() · 0d83a5eb
      Markus Elfring 提交于
      A single character (line break) should be put into a sequence.
      Thus use the corresponding function "seq_putc".
      
      This issue was detected by using the Coccinelle software.
      Signed-off-by: NMarkus Elfring <elfring@users.sourceforge.net>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      0d83a5eb
    • L
      gpio: No NULL owner · 7d18f0a1
      Linus Walleij 提交于
      Sometimes a GPIO is fetched with NULL as parent device, and
      that is just fine. So under these circumstances, avoid using
      dev_name() to provide a name for the GPIO line.
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      7d18f0a1
    • P
      gpio: stmpe: i2c transfer are forbiden in atomic context · b888fb6f
      Patrice Chotard 提交于
      Move the workaround from stmpe_gpio_irq_unmask() which is executed
      in atomic context to stmpe_gpio_irq_sync_unlock() which is not.
      
      It fixes the following issue:
      
      [    1.500000] BUG: scheduling while atomic: swapper/1/0x00000002
      [    1.500000] CPU: 0 PID: 1 Comm: swapper Not tainted 4.15.0-rc2-00020-gbd4301f-dirty #28
      [    1.520000] Hardware name: STM32 (Device Tree Support)
      [    1.520000] [<0000bfc9>] (unwind_backtrace) from [<0000b347>] (show_stack+0xb/0xc)
      [    1.530000] [<0000b347>] (show_stack) from [<0001fc49>] (__schedule_bug+0x39/0x58)
      [    1.530000] [<0001fc49>] (__schedule_bug) from [<00168211>] (__schedule+0x23/0x2b2)
      [    1.550000] [<00168211>] (__schedule) from [<001684f7>] (schedule+0x57/0x64)
      [    1.550000] [<001684f7>] (schedule) from [<0016a513>] (schedule_timeout+0x137/0x164)
      [    1.550000] [<0016a513>] (schedule_timeout) from [<00168b91>] (wait_for_common+0x8d/0xfc)
      [    1.570000] [<00168b91>] (wait_for_common) from [<00139753>] (stm32f4_i2c_xfer+0xe9/0xfe)
      [    1.580000] [<00139753>] (stm32f4_i2c_xfer) from [<00138545>] (__i2c_transfer+0x111/0x148)
      [    1.590000] [<00138545>] (__i2c_transfer) from [<001385cf>] (i2c_transfer+0x53/0x70)
      [    1.590000] [<001385cf>] (i2c_transfer) from [<001388a5>] (i2c_smbus_xfer+0x12f/0x36e)
      [    1.600000] [<001388a5>] (i2c_smbus_xfer) from [<00138b49>] (i2c_smbus_read_byte_data+0x1f/0x2a)
      [    1.610000] [<00138b49>] (i2c_smbus_read_byte_data) from [<00124fdd>] (__stmpe_reg_read+0xd/0x24)
      [    1.620000] [<00124fdd>] (__stmpe_reg_read) from [<001252b3>] (stmpe_reg_read+0x19/0x24)
      [    1.630000] [<001252b3>] (stmpe_reg_read) from [<0002c4d1>] (unmask_irq+0x17/0x22)
      [    1.640000] [<0002c4d1>] (unmask_irq) from [<0002c57f>] (irq_startup+0x6f/0x78)
      [    1.650000] [<0002c57f>] (irq_startup) from [<0002b7a1>] (__setup_irq+0x319/0x47c)
      [    1.650000] [<0002b7a1>] (__setup_irq) from [<0002bad3>] (request_threaded_irq+0x6b/0xe8)
      [    1.660000] [<0002bad3>] (request_threaded_irq) from [<0002d0b9>] (devm_request_threaded_irq+0x3b/0x6a)
      [    1.670000] [<0002d0b9>] (devm_request_threaded_irq) from [<001446e7>] (mmc_gpiod_request_cd_irq+0x49/0x8a)
      [    1.680000] [<001446e7>] (mmc_gpiod_request_cd_irq) from [<0013d45d>] (mmc_start_host+0x49/0x60)
      [    1.690000] [<0013d45d>] (mmc_start_host) from [<0013e40b>] (mmc_add_host+0x3b/0x54)
      [    1.700000] [<0013e40b>] (mmc_add_host) from [<00148119>] (mmci_probe+0x4d1/0x60c)
      [    1.710000] [<00148119>] (mmci_probe) from [<000f903b>] (amba_probe+0x7b/0xbe)
      [    1.720000] [<000f903b>] (amba_probe) from [<001170e5>] (driver_probe_device+0x169/0x1f8)
      [    1.730000] [<001170e5>] (driver_probe_device) from [<001171b7>] (__driver_attach+0x43/0x5c)
      [    1.740000] [<001171b7>] (__driver_attach) from [<0011618d>] (bus_for_each_dev+0x3d/0x46)
      [    1.740000] [<0011618d>] (bus_for_each_dev) from [<001165cd>] (bus_add_driver+0xcd/0x124)
      [    1.740000] [<001165cd>] (bus_add_driver) from [<00117713>] (driver_register+0x4d/0x7a)
      [    1.760000] [<00117713>] (driver_register) from [<001fc765>] (do_one_initcall+0xbd/0xe8)
      [    1.770000] [<001fc765>] (do_one_initcall) from [<001fc88b>] (kernel_init_freeable+0xfb/0x134)
      [    1.780000] [<001fc88b>] (kernel_init_freeable) from [<00167ee3>] (kernel_init+0x7/0x9c)
      [    1.790000] [<00167ee3>] (kernel_init) from [<00009b65>] (ret_from_fork+0x11/0x2c)
      
      Cc: stable@vger.kernel.org
      Signed-off-by: NAlexandre TORGUE <alexandre.torgue@st.com>
      Signed-off-by: NPatrice Chotard <patrice.chotard@st.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      b888fb6f
    • L
      gpio: mmio: Also read bits that are zero · 07c7b6a5
      Linus Walleij 提交于
      The code for .get_multiple() has bugs:
      
      1. The simple .get_multiple() just reads a register, masks it
      and sets the return value. This is not correct: we only want to
      assign values (whether 0 or 1) to the bits that are set in the
      mask. Fix this by using &= ~mask to clear all bits in the mask
      and then |= val & mask to set the corresponding bits from the
      read.
      
      2. The bgpio_get_multiple_be() call has a similar problem: it
      uses the |= operator to set the bits, so only the bits in the
      mask are affected, but it misses to clear all returned bits
      from the mask initially, so some bits will be returned
      erroneously set to 1.
      
      3. The bgpio_get_set_multiple() again fails to clear the bits
      from the mask.
      
      4. find_next_bit() wasn't handled correctly, use a totally
      different approach for one function and change the other
      function to follow the design pattern of assigning the first
      bit to -1, then use bit + 1 in the for loop and < num_iterations
      as break condition.
      
      Fixes: 80057cb4 ("gpio-mmio: Use the new .get_multiple() callback")
      Cc: Bartosz Golaszewski <brgl@bgdev.pl>
      Reported-by: NClemens Gruber <clemens.gruber@pqgruber.com>
      Tested-by: NClemens Gruber <clemens.gruber@pqgruber.com>
      Reported-by: NLukas Wunner <lukas@wunner.de>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      07c7b6a5
  6. 14 1月, 2018 12 次提交
  7. 12 1月, 2018 4 次提交
    • L
      gpio: of: Add special quirk to parse regulator flags · a603a2b8
      Linus Walleij 提交于
      While most GPIOs are indicated to be active low or open drain using
      their twocell flags, we have legacy regulator bindings to take into
      account.
      
      Add a quirk respecting the special boolean active-high and open
      drain flags when parsing regulator nodes for GPIOs.
      
      This makes it possible to get rid of duplicated inversion semantics
      handling in the regulator core and any regulator drivers parsing
      and handling this separately.
      
      Unfortunately the old regulator inversion semantics are specified
      such that the presence or absence of "enable-active-high" solely
      controls the semantics, so we cannot deprecate this in favor
      of the phandle-provided inversion flag, instead any such phandle
      inversion flag provided in the second cell of a GPIO handle must be
      actively ignored, so we print a warning to contain the situation
      and make things easy for the users.
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      a603a2b8
    • L
      gpio: Export devm_gpiod_get_from_of_node() for consumers · 92542edc
      Linus Walleij 提交于
      We have been holding back on adding an API for fetching GPIO handles
      directly from device nodes, strongly preferring to get it from the
      spawn devices instead.
      
      The fwnode interface however already contains an API for doing this,
      as it is used for opaque device tree nodes or ACPI nodes for getting
      handles to LEDs and keys that use GPIO: those are specified as one
      child per LED/key in the device tree and are not individual devices.
      
      However regulators present a special problem as they already have
      helper functions to traverse the device tree from a regulator node
      and two levels down to fill in data, and as it already traverses
      GPIO nodes in its own way, and already holds a pointer to each
      regulators device tree node, it makes most sense to export an
      API to fetch the GPIO descriptor directly from the node.
      
      We only support the devm_* version for now, hopefully no non-devres
      version will be needed.
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      92542edc
    • L
      gpio: Break out code to get a descriptor from a DT node · 6392cca4
      Linus Walleij 提交于
      Sometimes a GPIO needs to be taken from a node without
      a device associated with it. The fwnode accessor does this,
      let's however break out the DT code for now.
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      6392cca4
    • L
      gpio: of: Support regulator nonstandard GPIO properties · 6a537d48
      Linus Walleij 提交于
      Before it was clearly established that all GPIO properties in the
      device tree shall be named "foo-gpios" (with the deprecated variant
      "foo-gpio" for single lines) we unfortunately merged a few bindings
      for regulators with random phandle names.
      
      As we want to switch the GPIO regulator driver to using descriptors,
      we need devm_gpiod_get() to return something reasonable when looking
      up these in the device tree.
      
      Put in a special #ifdef:ed kludge to do this special lookup only
      for the regulator case and gets compiled out if we're not enabling
      regulators. Supply a whitelist with properties we accept.
      
      Cc: Rob Herring <robh@kernel.org>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      6a537d48
  8. 11 1月, 2018 2 次提交
    • W
      gpio: thunderx: fix error return code in thunderx_gpio_probe() · 76e28f5f
      Wei Yongjun 提交于
      Fix to return error code -ENOMEM from the error handling
      case instead of 0, as done elsewhere in this function.
      
      Fixes: 5a2a3002 ("gpio: Add gpio driver support for ThunderX and OCTEON-TX")
      Signed-off-by: NWei Yongjun <weiyongjun1@huawei.com>
      Acked-by: NDavid Daney <david.daney@cavium.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      76e28f5f
    • A
      gpio: winbond: fix ISA_BUS_API dependency · 92a8046c
      Arnd Bergmann 提交于
      The newly added GPIO driver for winbond chipsets causes a
      circular dependency warning in Kconfig:
      
      drivers/gpio/Kconfig:13:error: recursive dependency detected!
      drivers/gpio/Kconfig:13:	symbol GPIOLIB is selected by STX104
      drivers/iio/adc/Kconfig:699:	symbol STX104 depends on ISA_BUS_API
      arch/Kconfig:830:	symbol ISA_BUS_API is selected by GPIO_WINBOND
      drivers/gpio/Kconfig:701:	symbol GPIO_WINBOND depends on GPIOLIB
      
      The underlying problem is that ISA_BUS_API is not meant to be selected by
      device drivers, instead it is provided by the architectures that support
      ISA add-on card devices, or in case of x86 have this explicitly enabled.
      
      This particular driver appears to be different from the other ISA_BUS_API
      based drivers, in that it is not normally an add-on card (ISA or PC104)
      but instead is an LPC-attached component on the mainboard. We already
      support other functionality provided by this chip, at least
      drivers/watchdog/w83627hf_wdt.c and drivers/hwmon/w83627ehf.c, plus
      there is a discovery function for this hardware in
      drivers/parport/parport_pc.c.
      
      If we want to use this driver without having to enable CONFIG_EXPERT,
      it might be better to not use the isa_bus_type for it, but rather
      turn it into a platform_driver, acpi_driver or add an MFD for it that
      is shared with the wdt and hwmon portions and does the probing.
      
      For now, this patch fixes the dependency by changing 'select' into
      'depends on'.
      
      Cc: William Breathitt Gray <vilhelm.gray@gmail.com>
      Cc: Guenter Roeck <linux@roeck-us.net>
      Cc: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
      Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Fixes: a0d65009 ("gpio: winbond: Add driver")
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      92a8046c
  9. 10 1月, 2018 4 次提交
  10. 09 1月, 2018 3 次提交