14 Jul, 2020
1 commit
-
Quite some non OF/ACPI users of irqdomains allocate firmware nodes of type
IRQCHIP_FWNODE_NAMED or IRQCHIP_FWNODE_NAMED_ID and free them right after
creating the irqdomain. The only purpose of these FW nodes is to convey
name information. When this was introduced the core code did not store the
pointer to the node in the irqdomain. A recent change stored the firmware
node pointer in irqdomain for other reasons and missed to notice that the
usage sites which do the alloc_fwnode/create_domain/free_fwnode sequence
are broken by this. Storing a dangling pointer is dangerous itself, but in
case that the domain is destroyed later on this leads to a double free.Remove the freeing of the firmware node after creating the irqdomain from
all affected call sites to cure this.Fixes: 711419e504eb ("irqdomain: Add the missing assignment of domain->fwnode for named fwnode")
Reported-by: Andy Shevchenko
Signed-off-by: Thomas Gleixner
Acked-by: Bjorn Helgaas
Acked-by: Marc Zyngier
Cc: stable@vger.kernel.org
Link: https://lkml.kernel.org/r/873661qakd.fsf@nanos.tec.linutronix.de
16 Jun, 2020
1 commit
-
The driver name was accidentally removed when .probe() by was replaced
by .probe_new() during an early patch review.[ 121.243012] EAX: c2a8bc64 EBX: 00000000 ECX: 00000000 EDX: 00000000
[ 121.243012] ESI: c2a8bc79 EDI: 00000000 EBP: e54bdea8 ESP: e54bdea0
[ 121.243012] DS: 007b ES: 007b FS: 0000 GS: 0000 SS: 0068 EFLAGS: 00010286
[ 121.243012] CR0: 80050033 CR2: 00000000 CR3: 02ec3000 CR4: 000006b0
[ 121.243012] Call Trace:
[ 121.243012] kset_find_obj+0x3d/0xc0
[ 121.243012] driver_find+0x16/0x40
[ 121.243012] driver_register+0x49/0x100
[ 121.243012] ? i2c_for_each_dev+0x39/0x50
[ 121.243012] ? __process_new_adapter+0x20/0x20
[ 121.243012] ? cht_wc_driver_init+0x11/0x11
[ 121.243012] i2c_register_driver+0x30/0x80
[ 121.243012] ? intel_lpss_pci_driver_init+0x16/0x16
[ 121.243012] mt6360_pmu_driver_init+0xf/0x11
[ 121.243012] do_one_initcall+0x33/0x1a0
[ 121.243012] ? parse_args+0x1eb/0x3d0
[ 121.243012] ? __might_sleep+0x31/0x90
[ 121.243012] ? kernel_init_freeable+0x10a/0x17f
[ 121.243012] kernel_init_freeable+0x12c/0x17f
[ 121.243012] ? rest_init+0x110/0x110
[ 121.243012] kernel_init+0xb/0x100
[ 121.243012] ? schedule_tail_wrapper+0x9/0xc
[ 121.243012] ret_from_fork+0x19/0x24
[ 121.243012] Modules linked in:
[ 121.243012] CR2: 0000000000000000
[ 121.243012] random: get_random_bytes called from init_oops_id+0x3a/0x40 with crng_init=0
[ 121.243012] ---[ end trace 38a803400f1a2bee ]---
[ 121.243012] EIP: strcmp+0x11/0x30Fixes: 7edd363421dab ("mfd: Add support for PMIC MT6360")
Signed-off-by: Gene Chen
Reviewed-by: Matthias Brugger
[Lee: Taking the opportunity to fix the compatible string too 's/_/-/']
Signed-off-by: Lee Jones
14 Jun, 2020
1 commit
-
Since commit 84af7a6194e4 ("checkpatch: kconfig: prefer 'help' over
'---help---'"), the number of '---help---' has been gradually
decreasing, but there are still more than 2400 instances.This commit finishes the conversion. While I touched the lines,
I also fixed the indentation.There are a variety of indentation styles found.
a) 4 spaces + '---help---'
b) 7 spaces + '---help---'
c) 8 spaces + '---help---'
d) 1 space + 1 tab + '---help---'
e) 1 tab + '---help---' (correct indentation)
f) 1 tab + 1 space + '---help---'
g) 1 tab + 2 spaces + '---help---'In order to convert all of them to 1 tab + 'help', I ran the
following commend:$ find . -name 'Kconfig*' | xargs sed -i 's/^[[:space:]]*---help---/\thelp/'
Signed-off-by: Masahiro Yamada
06 Jun, 2020
1 commit
-
Pull GPIO updates from Linus Walleij:
"This is the bulk of GPIO changes for the v5.8 kernel cycle.Core changes:
- A new GPIO aggregator driver has been merged: this can join a few
select GPIO lines into a new aggregated GPIO chip. This can be used
for security: a process can be granted access to only these lines,
for example for industrial control. Another way to use this is to
reexpose certain select lines to a virtual machine or container.- Warn if the gpio-line-names is too long in he DT parser core.
- GPIO lines can now be looked up by line name in addition to being
looked up by offset.New drivers:
- A new generic regmap GPIO driver has been merged. Too many regmap
drivers are starting to look like each other so we need to create
some common ground and try to move drivers over to using that.- The F7188X driver now supports F81865.
Driver improvements:
- Large improvements to the PCA953x expander, get multiple lines and
several cleanups.- Large improvements to the DesignWare DWAPB driver, and Sergey Semin
has volunteered to maintain it.- PL061 can now be built as a module, this is part of a bigger effort
to make the ARM platforms more modular"* tag 'gpio-v5.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio: (77 commits)
gpio: pca953x: Drop unneeded ACPI_PTR()
MAINTAINERS: Add gpio regmap section
gpio: add a reusable generic gpio_chip using regmap
gpiolib: Introduce gpiochip_irqchip_add_domain()
gpio: gpiolib: Allow GPIO IRQs to lazy disable
gpiolib: Separate GPIO_GET_LINEINFO_WATCH_IOCTL conditional
gpio: rcar: Fix runtime PM imbalance on error
gpio: pca935x: Allow IRQ support for driver built as a module
gpio: pxa: Add COMPILE_TEST support
dt-bindings: gpio: Add renesas,em-gio bindings
MAINTAINERS: Fix file name for DesignWare GPIO DT schema
gpio: dwapb: Remove unneeded has_irq member in struct dwapb_port_property
gpio: dwapb: Don't use IRQ 0 as valid Linux interrupt
gpio: dwapb: avoid error message for optional IRQ
gpio: dwapb: Call acpi_gpiochip_free_interrupts() on GPIO chip de-registration
gpio: max730x: bring gpiochip_add_data after port config
MAINTAINERS: Add GPIO Aggregator section
docs: gpio: Add GPIO Aggregator documentation
gpio: Add GPIO Aggregator
gpiolib: Add support for GPIO lookup by line name
...
05 Jun, 2020
1 commit
-
Pull ARM SoC updates from Arnd Bergmann:
"One new platform gets added, the Realtek RTD1195, which is an older
Cortex-a7 based relative of the RTD12xx chips that are already
supported in arch/arm64. The platform may also be extended to support
running 32-bit kernels on those 64-bit chips for memory-constrained
machines.In the Renesas shmobile platform, we gain support for "RZ/G1H" or
R8A7742, an eight-core chip based on Cortex-A15 and Cortex-A7 cores,
originally released in 2016 as one of the last high-end 32-bit
designs.There is ongoing cleanup for the integrator, tegra, imx, and omap2
platforms, with integrator getting very close to the goal of having
zero code in arch/arm/, and omap2 moving more of the chip specifics
from old board code into device tree files.The Versatile Express platform is made more modular, with built-in
drivers now becoming loadable modules. This is part of a greater
effort for the Android OS to have a common kernel binary for all
platforms and any platform specific code in loadable modules.The PXA platform drops support for Compulab's pxa2xx boards that had
rather unusual flash and PCI drivers but no known users remaining. All
device drivers specific to those boards can now get removed as well.Across platforms, there is ongoing cleanup, with Geert and Rob
revisiting some a lot of Kconfig options"* tag 'arm-soc-5.8' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (94 commits)
ARM: omap2: fix omap5_realtime_timer_init definition
ARM: zynq: Don't select CONFIG_ICST
ARM: OMAP2+: Fix regression for using local timer on non-SMP SoCs
clk: versatile: Fix kconfig dependency on COMMON_CLK_VERSATILE
ARM: davinci: fix build failure without I2C
power: reset: vexpress: fix build issue
power: vexpress: cleanup: use builtin_platform_driver
power: vexpress: add suppress_bind_attrs to true
Revert "ARM: vexpress: Don't select VEXPRESS_CONFIG"
MAINTAINERS: pxa: remove Compulab arm/pxa support
ARM: pxa: remove Compulab pxa2xx boards
bus: arm-integrator-lm: Fix return value check in integrator_ap_lm_probe()
soc: imx: move cpu code to drivers/soc/imx
ARM: imx: move cpu definitions into a header
ARM: imx: use device_initcall for imx_soc_device_init
ARM: imx: pcm037: make pcm970_sja1000_platform_data static
bus: ti-sysc: Timers no longer need legacy quirk handling
ARM: OMAP2+: Drop old timer code for dmtimer and 32k counter
ARM: dts: Configure system timers for omap2
ARM: dts: Configure system timers for ti81xx
...
01 Jun, 2020
1 commit
-
Fixes the following build warning:
>> drivers/mfd/mt6360-core.c:148:2: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]
REGMAP_IRQ_REG_LINE(MT6360_CHG_TREG_EVT, 8),
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/regmap.h:1191:10: note: expanded from macro 'REGMAP_IRQ_REG_LINE'
[_id] = { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/mfd/mt6360-core.c:124:2: note: previous initialization is here
REGMAP_IRQ_REG_LINE(MT6360_CHG_TREG_EVT, 8),
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/regmap.h:1191:10: note: expanded from macro 'REGMAP_IRQ_REG_LINE'
[_id] = { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.Reported-by: kbuild test robot
Signed-off-by: Lee Jones
27 May, 2020
1 commit
-
Add MFD driver for mt6360 pmic chip include Battery Charger/
USB_PD/Flash, LED/RGB and LED/LDO/BuckSigned-off-by: Gene Chen
Signed-off-by: Lee Jones
26 May, 2020
16 commits
-
The MAX77620 doesn't support bulk writes, so make sure the regmap code
breaks bulk writes into multiple single-byte writes.Note that this is mostly cosmetic because currently only the RTC sub-
driver uses bulk writes and the RTC driver ends up using a different
regmap on the MAX77620 anyway. However, it seems like a good idea to
make this change now in order to avoid running into issues if bulk
writes are ever used by other sub-drivers sometime down the road.Signed-off-by: Thierry Reding
Acked-by: Jon Hunter
Tested-by: Jon Hunter
Signed-off-by: Lee Jones -
It's not necessary to free memory allocated with devm_kzalloc
and using kfree leads to a double free.Fixes: 6ac7e4d7ad70 ("mfd: wcd934x: Add support to wcd9340/wcd9341 codec")
Signed-off-by: Wei Yongjun
Signed-off-by: Lee Jones -
When STMFX supply is stopped, spurious interrupt can occur. To avoid that,
disable the interrupt in suspend before disabling the regulator and
re-enable it at the end of resume.Fixes: 06252ade9156 ("mfd: Add ST Multi-Function eXpander (STMFX) core driver")
Signed-off-by: Amelie Delaunay
Signed-off-by: Lee Jones -
In case the interrupt signal can't be configured, IRQ domain needs to be
removed.Fixes: 06252ade9156 ("mfd: Add ST Multi-Function eXpander (STMFX) core driver")
Signed-off-by: Amelie Delaunay
Signed-off-by: Lee Jones -
STMFX supply is disabled during suspend. To avoid a too early access to
the STMFX firmware on resume, reset the chip and wait for its firmware to
be loaded.Fixes: 06252ade9156 ("mfd: Add ST Multi-Function eXpander (STMFX) core driver")
Signed-off-by: Amelie Delaunay
Signed-off-by: Lee Jones -
Don't confuse user with meaningless warning about the failure in getting
supplies in case of deferred probe.Signed-off-by: Marek Szyprowski
Acked-by: Charles Keepax
Signed-off-by: Lee Jones -
When runtime PM is enabled, regulators are being controlled by the
driver's suspend and resume callbacks. They are also unconditionally
enabled at driver's probe(), and disabled in remove() functions. Add
more calls to runtime PM framework to ensure that the device's runtime
PM state matches the regulators state:
1. at the end of probe() function: set runtime PM state to active, so
there will be no spurious call to resume();
2. in remove(), ensure that resume() is called before disabling runtime PM
management and unconditionally disabling the regulators.Signed-off-by: Marek Szyprowski
Acked-by: Charles Keepax
Signed-off-by: Lee Jones -
WM8994 chip has built-in regulators, which might be used for chip
operation. They are controlled by a separate wm8994-regulator driver,
which should be loaded before this driver calls regulator_get(), because
that driver also provides consumer-supply mapping for the them. If that
driver is not yet loaded, regulator core substitute them with dummy
regulator, what breaks chip operation, because the built-in regulators are
never enabled. Fix this by annotating this driver with MODULE_SOFTDEP()
"pre" dependency to "wm8994_regulator" module.Signed-off-by: Marek Szyprowski
Acked-by: Charles Keepax
Signed-off-by: Lee Jones -
dma_request_slave_channel() is a wrapper on top of dma_request_chan()
eating up the error code.By using dma_request_chan() directly the driver can support deferred
probing against DMA.Signed-off-by: Peter Ujfalusi
Acked-by: Fabrice Gasnier
Signed-off-by: Lee Jones -
The spi_register_driver() will set the spi_bus_type for the spi_driver,
thus remove the redundant setting in this driver.Signed-off-by: Baolin Wang
Signed-off-by: Lee Jones -
It appears that preliminary documentation has a typo in the ID list,
i.e. LPSS UART #2 had been advertised wrongly.Fix the driver according to the EDS v0.9.
Signed-off-by: Andy Shevchenko
Signed-off-by: Lee Jones -
Based on the file name and code of the driver, it is likely that this
module is related to TQMx86 and not TQx86.Signed-off-by: Christophe JAILLET
Reviewed-by: Andrew Lunn
Reviewed-by: Rob Herring
Signed-off-by: Lee Jones -
Fix sparse warning:
drivers/mfd/stpmic1.c:62:28: warning:
symbol 'stpmic1_regmap_config' was not declared. Should it be static?Reported-by: Hulk Robot
Signed-off-by: YueHaibing
Signed-off-by: Lee Jones -
Move away from the deprecated API and return the shiny new ERRPTR where
useful.Signed-off-by: Wolfram Sang
Signed-off-by: Lee Jones -
…o-power-5.8' and 'ib-mfd-hwmon-5.8' into ibs-for-mfd-merged
-
mp2629 is a highly-integrated switching-mode battery charge management
device for single-cell Li-ion or Li-polymer battery.Add MFD core enables chip access for ADC driver for battery readings,
and a power supply battery-charger driverSigned-off-by: Saravanan Sekar
Reviewed-by: Andy Shevchenko
Reviewed-by: Jonathan Cameron
Signed-off-by: Lee Jones
25 May, 2020
1 commit
-
has_irq member of struct dwapb_port_property is used only in one place,
so, make it local test instead and remove from the structure.
This local test is using memchr_inv() which is quite efficient in comparison
to the original loop and possible little overhead can be neglected.Signed-off-by: Andy Shevchenko
Tested-by: Serge Semin
Acked-by: Lee Jones
Acked-by: Serge Semin
Link: https://lore.kernel.org/r/20200519131233.59032-4-andriy.shevchenko@linux.intel.com
Signed-off-by: Linus Walleij
21 May, 2020
3 commits
-
This adds support for the MediaTek MT6358 PMIC. This is a
multifunction device with the following sub modules:- Regulator
- RTC
- Codec
- InterruptIt is interfaced to the host controller using SPI interface
by a proprietary hardware called PMIC wrapper or pwrap.
MT6358 MFD is a child device of the pwrap.Signed-off-by: Hsin-Hsiung Wang
Signed-off-by: Lee Jones -
Add new struct members for mfd-cells and irq initial function, so we can
call devm_mfd_add_devices() only once.Signed-off-by: Hsin-Hsiung Wang
Signed-off-by: Lee Jones -
Some pmics don't need backup interrupt settings, so we change to use
pm notifier for the pmics which are necessary to store settings.Signed-off-by: Hsin-Hsiung Wang
Signed-off-by: Lee Jones
20 May, 2020
1 commit
-
The Gateworks System Controller (GSC) is an I2C slave controller
implemented with an MSP430 micro-controller whose firmware embeds the
following features:
- I/O expander (16 GPIO's) using PCA955x protocol
- Real Time Clock using DS1672 protocol
- User EEPROM using AT24 protocol
- HWMON using custom protocol
- Interrupt controller with tamper detect, user pushbotton
- Watchdog controller capable of full board power-cycle
- Power Control capable of full board power-cyclesee http://trac.gateworks.com/wiki/gsc for more details
Signed-off-by: Tim Harvey
Signed-off-by: Lee Jones
18 May, 2020
1 commit
-
i801_add_mux() fills in the GPIO lookup table by manually populating an
array of gpiod_lookup structures. Use the existing GPIO_LOOKUP_IDX()
helper macro instead, to relax a dependency on the gpiod_lookup
structure's member names.Signed-off-by: Geert Uytterhoeven
Acked-by: Lee Jones
Link: https://lore.kernel.org/r/20200511145257.22970-3-geert+renesas@glider.be
Signed-off-by: Linus Walleij
14 May, 2020
5 commits
-
There's only a single caller of vexpress_config_set_master() from
vexpress-sysreg.c. Let's just make the registers needed available to
vexpress-config and move all the code there. The registers needed aren't
used anywhere else either. With this, we can get rid of the private API
between these 2 drivers.Cc: Lorenzo Pieralisi
Cc: Linus Walleij
Cc: Greg Kroah-Hartman
Acked-by: Liviu Dudau
Acked-by: Sudeep Holla
Acked-by: Lee Jones
Signed-off-by: Rob Herring -
Enable building the vexpress-sysreg driver as a module.
As deferred probe between the vexpress components works now, we don't
need to create struct devices early with of_platform_device_create().Cc: Liviu Dudau
Cc: Lorenzo Pieralisi
Cc: Linus Walleij
Reviewed-by: Sudeep Holla
Acked-by: Lee Jones
Signed-off-by: Rob Herring -
Use the managed devm_gpiochip_add_data() and devm_mfd_add_devices()
instead of their unmanaged counterparts. With this, no .remove() hook is
needed for driver unbind.Cc: Lorenzo Pieralisi
Cc: Linus Walleij
Reviewed-by: Sudeep Holla
Acked-by: Arnd Bergmann
Acked-by: Liviu Dudau
Acked-by: Lee Jones
Signed-off-by: Rob Herring -
The "sys_id", "sys_misc" and "sys_procid" devices don't have a user
anywhere in the tree and do nothing more than create a syscon regmap for
a single register or 2. That's an overkill for creating child devices.
Let's just remove them.Cc: Liviu Dudau
Cc: Lorenzo Pieralisi
Cc: Linus Walleij
Reviewed-by: Sudeep Holla
Acked-by: Lee Jones
Signed-off-by: Rob Herring -
Nothing in the VExpress sysregs nor the MFD child drivers use
CONFIG_CLKSRC_MMIO. There's the 24MHz counter, but that's handled by
drivers/clocksource/timer-versatile.c which doesn't use
CONFIG_CLKSRC_MMIO either. So let's just drop CONFIG_CLKSRC_MMIO.As the !ARCH_USES_GETTIMEOFFSET dependency was added for
CONFIG_CLKSRC_MMIO, that can be dropped, too.Cc: Lorenzo Pieralisi
Cc: Linus Walleij
Reviewed-by: Sudeep Holla
Acked-by: Arnd Bergmann
Acked-by: Liviu Dudau
Acked-by: Lee Jones
Signed-off-by: Rob Herring
06 May, 2020
1 commit
-
vexpress_flags_set() is only used by the platform SMP related code and
has nothing to do with the vexpress-sysreg MFD driver other than both
access the same h/w block. It's also only needed for 32-bit systems and
must be built-in for them. Let's move vexpress_flags_set() closer to
where it is being used. This will allow for vexpress-sysreg to be built
as a module.Cc: Lorenzo Pieralisi
Cc: Linus Walleij
Reviewed-by: Sudeep Holla
Acked-by: Arnd Bergmann
Acked-by: Liviu Dudau
Acked-by: Lee Jones
Signed-off-by: Rob Herring
24 Apr, 2020
4 commits
-
This driver only creates a bunch of platform devices sharing resources
belonging to the PMC device. This is pretty much what MFD subsystem is
for so move the driver there, renaming it to intel_pmc_bxt.c which
should be more clear what it is.MFD subsystem provides nice helper APIs for subdevice creation so
convert the driver to use those. Unfortunately the ACPI device includes
separate resources for most of the subdevices so we cannot simply call
mfd_add_devices() to create all of them but instead we need to call it
separately for each device.The new MFD driver continues to expose two sysfs attributes that allow
userspace to send IPC commands to the PMC/SCU to avoid breaking any
existing applications that may use these. Generally this is bad idea so
document this in the ABI documentation.Signed-off-by: Mika Westerberg
Reviewed-by: Andy Shevchenko
Signed-off-by: Lee Jones -
This converts the Intel Merrifield PMIC driver over the new SCU IPC API
where the SCU IPC instance is passed to the functions.Signed-off-by: Mika Westerberg
Reviewed-by: Andy Shevchenko
Signed-off-by: Lee Jones -
Convert the Intel Broxton Whiskey Cover PMIC driver to use the new SCU
IPC API. This allows us to get rid of the PMC IPC implementation which
is now covered in SCU IPC driver. We drop the error log if the IPC
command fails because intel_scu_ipc_dev_command() does that already.Also move PMIC specific IPC message constants to the PMIC driver from
the intel_pmc_ipc.h header.Signed-off-by: Mika Westerberg
Reviewed-by: Andy Shevchenko
Signed-off-by: Lee Jones -
The SCU IPC functionality is usable outside of Intel MID devices. For
example modern Intel CPUs include the same thing but now it is called
PMC (Power Management Controller) instead of SCU. To make the IPC
available for those split the driver into core part (intel_scu_ipc.c)
and the SCU PCI driver part (intel_scu_pcidrv.c) which then calls the
former before it goes and creates rest of the SCU devices. The SCU IPC
will also register a new class that gets assigned to the device that is
created under the parent PCI device.We also split the Kconfig symbols so that INTEL_SCU_IPC enables the SCU
IPC library and INTEL_SCU_PCI the SCU driver and convert the users
accordingly. While there remove default y from the INTEL_SCU_PCI symbol
as it is already selected by X86_INTEL_MID.Signed-off-by: Mika Westerberg
Reviewed-by: Andy Shevchenko
Signed-off-by: Lee Jones
30 Mar, 2020
1 commit
-
Intel Elkhart Lake LPSS I2C has 100 MHz input clock instead of 133 MHz
that was our preliminary information. This will result slower I2C bus
clock when driver calculates its timing parameters in case ACPI tables
don't provide them.Slower I2C bus clock is allowed but let's fix this to match with
reality.While at it, keep the same default I2C device properties as Intel
Broxton since it is not known do they need any update.Signed-off-by: Jarkko Nikula
Reviewed-by: Andy Shevchenko
Signed-off-by: Lee Jones