linux/drivers/pinctrl/samsung
Krzysztof Kozlowski a8be2af021 pinctrl: samsung: Write external wakeup interrupt mask
The pinctrl driver defines an IRQ chip which handles external wakeup
interrupts, therefore from logical point of view, it is the owner of
external interrupt mask.  The register controlling the mask belongs to
Power Management Unit address space so it has to be accessed with PMU
syscon regmap handle.

This mask should be written to hardware during system suspend.  Till now
ARMv7 machine code was responsible for this which created a dependency
between pin controller driver and arch/arm/mach code.

Try to rework this dependency so the pinctrl driver will write external
wakeup interrupt mask during late suspend.

Impact on ARMv7 designs (S5Pv210 and Exynos)
============================================
This duplicates setting mask with existing machine code
arch/arm/mach-exynos/suspend.c and arch/arm/mach-s5pv210/pm.c but it is
not a problem - the wakeup mask register will be written twice.  The
machine code will be cleaned up later.

The difference between implementation here and ARMv7 machine code
(arch/arm/mach-*) is the time of writing the mask:
1. The machine code is writing the mask quite late during system suspend
   path, after offlining secondary CPUs and just before doing actual
   suspend.
2. The implementation in pinctrl driver uses late suspend ops, therefore it
   will write the mask much earlier.  Hopefully late enough, after all
   drivers will enable or disable their interrupt wakeups
   (enable_irq_wake() etc).

Impact on ARMv8 designs (Exynos5433 and Exynos7)
================================================
The Suspend to RAM was not supported and external wakeup interrupt mask
was not written to HW.  This change brings us one step closer to
supporting Suspend to RAM.

Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
Cc: Tomasz Figa <tomasz.figa@gmail.com>
Cc: Sylwester Nawrocki <snawrocki@kernel.org>
Acked-by: Tomasz Figa <tomasz.figa@gmail.com>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
2018-07-24 21:56:41 +02:00
..
Kconfig pinctrl: samsung: Remove support for Exynos5440 2018-05-02 19:08:55 +02:00
Makefile pinctrl: samsung: Remove support for Exynos5440 2018-05-02 19:08:55 +02:00
pinctrl-exynos-arm64.c pinctrl: samsung: Document required order of banks 2018-04-18 17:48:39 +02:00
pinctrl-exynos-arm.c pinctrl: samsung: Define suspend and resume callbacks for all banks and SoCs 2018-07-24 21:35:54 +02:00
pinctrl-exynos.c pinctrl: samsung: Write external wakeup interrupt mask 2018-07-24 21:56:41 +02:00
pinctrl-exynos.h pinctrl: samsung: Fix suspend/resume for Exynos5433 GPF1..5 banks 2018-05-23 21:23:19 +02:00
pinctrl-s3c24xx.c pinctrl: samsung: Validate alias coming from DT 2018-03-08 13:02:26 +01:00
pinctrl-s3c64xx.c treewide: Use struct_size() for devm_kmalloc() and friends 2018-06-06 11:15:43 -07:00
pinctrl-samsung.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
pinctrl-samsung.h pinctrl: samsung: Write external wakeup interrupt mask 2018-07-24 21:56:41 +02:00