1. 17 Jan, 2018 1 commit
    • Patrice Chotard's avatar
      gpio: stmpe: i2c transfer are forbiden in atomic context · b888fb6f
      Patrice Chotard authored
      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: default avatarAlexandre TORGUE <alexandre.torgue@st.com>
      Signed-off-by: default avatarPatrice Chotard <patrice.chotard@st.com>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      b888fb6f
  2. 12 Jan, 2018 4 commits
    • Linus Walleij's avatar
      gpio: of: Add special quirk to parse regulator flags · a603a2b8
      Linus Walleij authored
      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: default avatarLinus Walleij <linus.walleij@linaro.org>
      a603a2b8
    • Linus Walleij's avatar
      gpio: Export devm_gpiod_get_from_of_node() for consumers · 92542edc
      Linus Walleij authored
      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: default avatarLinus Walleij <linus.walleij@linaro.org>
      92542edc
    • Linus Walleij's avatar
      gpio: Break out code to get a descriptor from a DT node · 6392cca4
      Linus Walleij authored
      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: default avatarLinus Walleij <linus.walleij@linaro.org>
      6392cca4
    • Linus Walleij's avatar
      gpio: of: Support regulator nonstandard GPIO properties · 6a537d48
      Linus Walleij authored
      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: default avatarLinus Walleij <linus.walleij@linaro.org>
      6a537d48
  3. 11 Jan, 2018 2 commits
    • Wei Yongjun's avatar
      gpio: thunderx: fix error return code in thunderx_gpio_probe() · 76e28f5f
      Wei Yongjun authored
      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: default avatarWei Yongjun <weiyongjun1@huawei.com>
      Acked-by: default avatarDavid Daney <david.daney@cavium.com>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      76e28f5f
    • Arnd Bergmann's avatar
      gpio: winbond: fix ISA_BUS_API dependency · 92a8046c
      Arnd Bergmann authored
      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: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      92a8046c
  4. 10 Jan, 2018 2 commits
  5. 09 Jan, 2018 3 commits
  6. 08 Jan, 2018 1 commit
    • Linus Walleij's avatar
      gpio: of: Support SPI nonstandard GPIO properties · c8582339
      Linus Walleij authored
      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
      which named the lines "gpio-foo" instead.
      
      This is most prominent in the GPIO SPI driver in Linux which names
      the lines "gpio-sck", "gpio-mosi" and "gpio-miso".
      
      As we want to switch the GPIO SPI 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 SPI case and gets compiled out if we're not enabling SPI.
      If we have more oddly defined legacy GPIOs like this, they can be
      handled in a similar manner.
      Reviewed-by: default avatarRob Herring <robh@kernel.org>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      c8582339
  7. 05 Jan, 2018 1 commit
    • Linus Walleij's avatar
      gpio: label descriptors using the device name · 24e78079
      Linus Walleij authored
      Some GPIO lines appear named "?" in the lsgpio dump due to their
      requesting drivers not passing a reasonable label.
      
      Most typically this happens if a device tree node just defines
      gpios = <...> and not foo-gpios = <...>, the former gets named
      "foo" and the latter gets named "?".
      
      However the struct device passed in is always valid so let's
      just label the GPIO with dev_name() on the device if no proper
      label was passed.
      
      Cc: Reported-by: Jason Kridner <jkridner@beagleboard.org>
      Reported-by: default avatarJason Kridner <jkridner@beagleboard.org>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      24e78079
  8. 03 Jan, 2018 1 commit
    • Linus Walleij's avatar
      gpio: omap: Give unique labels to each GPIO bank/chip · 088413bc
      Linus Walleij authored
      As we need to add GPIO lookup tables to the OMAP platforms, we
      need to reference each GPIO chip with a unique label. Use the GPIO
      base to name each chip, "gpio-0-31", "gpio-32-63" etc.
      
      Cc: Grygorii Strashko <grygorii.strashko@ti.com>
      Cc: Santosh Shilimkar <ssantosh@kernel.org>
      Cc: Kevin Hilman <khilman@kernel.org>
      Cc: linux-omap@vger.kernel.org
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      088413bc
  9. 02 Jan, 2018 3 commits
  10. 28 Dec, 2017 2 commits
  11. 21 Dec, 2017 6 commits
  12. 20 Dec, 2017 8 commits
  13. 08 Dec, 2017 2 commits
    • Bartosz Golaszewski's avatar
      gpio: mockup: fix a return value check · c4b54e13
      Bartosz Golaszewski authored
      The return value of platform_device_register_resndata() on error is
      an error code converted to pointer with ERR_PTR(), not NULL.
      
      Check the return value correctly.
      
      Fixes: 8a39f597 ("gpio: mockup: rework device probing")
      Signed-off-by: default avatarBartosz Golaszewski <brgl@bgdev.pl>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      c4b54e13
    • Linus Walleij's avatar
      w1: w1-gpio: Convert to use GPIO descriptors · e0fc62a6
      Linus Walleij authored
      The w1 master driver includes a complete open drain emulation
      reimplementation among other things.
      
      This converts the driver and all board files using it to use
      GPIO descriptors associated with the device to look up the
      GPIO wire, as well ass the optional pull-up GPIO line.
      
      When probed from the device tree, the driver will just pick
      descriptors and use them right off. For the two board files
      in the kernel, we add descriptor lookups so we do not need
      to keep any old platform data handling around for the GPIO
      lines.
      
      As the platform data is also a state container for this driver,
      we augment it to contain the GPIO descriptors.
      
      w1_gpio_write_bit_dir() and w1_gpio_write_bit_val() are gone
      since this pair was a reimplementation of open drain emulation
      which is now handled by gpiolib.
      
      The special "linux,open-drain" flag is a bit of mishap here:
      it has the same semantic as the same flags in I2C: it means
      that something in the platform is setting up the line as
      open drain behind our back. We handle this the same way as
      in I2C.
      
      To drive the pull-up, we need to bypass open drain emulation
      in gpiolib for the line, and this is done by driving it high
      using gpiod_set_raw_value() which has been augmented to have
      the semantic of overriding the open drain emulation.
      
      We also augment the documentation to reflect the way to pass
      GPIO descriptors from the machine.
      Acked-by: default avatarEvgeniy Polyakov <zbr@ioremap.net>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      e0fc62a6
  14. 07 Dec, 2017 4 commits