1
0
Fork 0
alistair23-linux/drivers
Hans de Goede 512b18eec5 pinctrl: baytrail: Fix pin being driven low for a while on gpiod_get(..., GPIOD_OUT_HIGH)
commit 156abe2961 upstream

The pins on the Bay Trail SoC have separate input-buffer and output-buffer
enable bits and a read of the level bit of the value register will always
return the value from the input-buffer.

The BIOS of a device may configure a pin in output-only mode, only enabling
the output buffer, and write 1 to the level bit to drive the pin high.
This 1 written to the level bit will be stored inside the data-latch of the
output buffer.

But a subsequent read of the value register will return 0 for the level bit
because the input-buffer is disabled. This causes a read-modify-write as
done by byt_gpio_set_direction() to write 0 to the level bit, driving the
pin low!

Before this commit byt_gpio_direction_output() relied on
pinctrl_gpio_direction_output() to set the direction, followed by a call
to byt_gpio_set() to apply the selected value. This causes the pin to
go low between the pinctrl_gpio_direction_output() and byt_gpio_set()
calls.

Change byt_gpio_direction_output() to directly make the register
modifications itself instead. Replacing the 2 subsequent writes to the
value register with a single write.

Note that the pinctrl code does not keep track internally of the direction,
so not going through pinctrl_gpio_direction_output() is not an issue.

This issue was noticed on a Trekstor SurfTab Twin 10.1. When the panel is
already on at boot (no external monitor connected), then the i915 driver
does a gpiod_get(..., GPIOD_OUT_HIGH) for the panel-enable GPIO. The
temporarily going low of that GPIO was causing the panel to reset itself
after which it would not show an image until it was turned off and back on
again (until a full modeset was done on it). This commit fixes this.

This commit also updates the byt_gpio_direction_input() to use direct
register accesses instead of going through pinctrl_gpio_direction_input(),
to keep it consistent with byt_gpio_direction_output().

Note for backporting, this commit depends on:
commit e2b74419e5 ("pinctrl: baytrail: Replace WARN with dev_info_once
when setting direct-irq pin to output")

Cc: stable@vger.kernel.org
Fixes: 86e3ef812f ("pinctrl: baytrail: Update gpio chip operations")
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
[sudip: use byt_gpio and vg->pdev->dev for dev_info()]
Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-12-11 13:23:27 +01:00
..
accessibility
acpi ACPI: button: Add DMI quirk for Medion Akoya E2228T 2020-11-24 13:29:00 +01:00
amba
android binder: Remove bogus warning on failed same-process transaction 2020-10-29 09:57:37 +01:00
ata ata: sata_nv: Fix retrieving of active qcs 2020-11-05 11:43:12 +01:00
atm atm: nicstar: Unmap DMA on send error 2020-11-24 13:28:55 +01:00
auxdisplay
base PM: runtime: Resume the device earlier in __device_release_driver() 2020-11-10 12:37:34 +01:00
bcma
block nbd: fix a block_device refcount leak in nbd_release 2020-11-18 19:20:27 +01:00
bluetooth Bluetooth: btusb: Fix memleak in btusb_mtk_submit_wmt_recv_urb 2020-10-29 09:58:08 +01:00
bus bus: ti-sysc: Fix bogus resetdone warning on enable for cpsw 2020-12-02 08:49:49 +01:00
cdrom
char virtio: virtio_console: fix DMA memory allocation for rproc serial 2020-11-18 19:20:29 +01:00
clk clk: ti: clockdomain: fix static checker warning 2020-11-05 11:43:20 +01:00
clocksource clocksource/drivers/timer-gx6605s: Fixup counter reload 2020-10-07 08:01:25 +02:00
connector
counter
cpufreq acpi-cpufreq: Honor _PSD table setting on new AMD CPUs 2020-11-05 11:43:25 +01:00
cpuidle cpuidle: Fixup IRQ state 2020-09-09 19:12:21 +02:00
crypto chelsio/chtls: fix a double free in chtls_setkey() 2020-12-08 10:40:26 +01:00
dax dax: Fix alloc_dax_region() compile warning 2020-10-01 13:17:15 +02:00
dca
devfreq PM / devfreq: tegra30: Fix integer overflow on CPU's freq max out 2020-10-01 13:17:14 +02:00
dio
dma dmaengine: pl330: _prep_dma_memcpy: Fix wrong burst size 2020-12-02 08:49:48 +01:00
dma-buf dmabuf: fix NULL pointer dereference in dma_buf_release() 2020-10-01 13:18:24 +02:00
edac EDAC/ti: Fix handling of platform_get_irq() error 2020-10-29 09:57:29 +01:00
eisa
extcon extcon: ptn5150: Fix usage of atomic GPIO with sleeping GPIO chips 2020-11-05 11:43:24 +01:00
firewire
firmware efi: EFI_EARLYCON should depend on EFI 2020-12-02 08:49:53 +01:00
fpga fpga: dfl: fix bug in port reset handshake 2020-07-29 10:18:31 +02:00
fsi
gnss gnss: sirf: fix error return code in sirf_probe() 2020-06-22 09:31:20 +02:00
gpio gpio: pcie-idio-24: Enable PEX8311 interrupts 2020-11-18 19:20:31 +01:00
gpu drm/i915: Handle max_bpc==16 2020-11-24 13:29:23 +01:00
greybus
hid HID: Add Logitech Dinovo Edge battery quirk 2020-12-02 08:49:48 +01:00
hsi
hv Drivers: hv: vmbus: Allow cleanup of VMBUS_CONNECT_CPU if disconnected 2020-11-24 13:29:23 +01:00
hwmon hwmon: (pwm-fan) Fix RPM calculation 2020-11-24 13:29:01 +01:00
hwspinlock
hwtracing Revert "coresight: Make sysfs functional on topologies with per core sink" 2020-11-10 12:37:31 +01:00
i2c i2c: sh_mobile: implement atomic transfers 2020-11-18 19:20:25 +01:00
i3c i3c: master: Fix error return in cdns_i3c_master_probe() 2020-10-29 09:57:51 +01:00
ide
idle
iio iio: adc: mediatek: fix unset field 2020-11-24 13:29:21 +01:00
infiniband RDMA/i40iw: Address an mmap handler exploit in i40iw 2020-12-08 10:40:28 +01:00
input Input: i8042 - add ByteSpeed touchpad to noloop table 2020-12-08 10:40:27 +01:00
interconnect
iommu iommu/vt-d: Avoid panic if iommu init fails in tboot system 2020-11-24 13:29:17 +01:00
ipack ipack: tpci200: fix error return code in tpci200_register() 2020-05-27 17:46:47 +02:00
irqchip irqchip/exiu: Fix the index of fwspec for IRQ type 2020-12-02 08:49:55 +01:00
isdn
leds leds: bcm6328, bcm6358: use devres LED registering function 2020-11-05 11:43:24 +01:00
lightnvm lightnvm: fix out-of-bounds write to array devices->info[] 2020-10-29 09:58:00 +01:00
macintosh macintosh/via-macii: Access autopoll_devs when inside lock 2020-08-19 08:16:15 +02:00
mailbox mailbox: avoid timer start from callback 2020-10-29 09:57:53 +01:00
mcb
md md/raid5: fix oops during stripe resizing 2020-11-05 11:43:22 +01:00
media media: uvcvideo: Fix uvc_ctrl_fixup_xu_info() not having any effect 2020-11-05 11:43:24 +01:00
memory memory: emif: Remove bogus debugfs error handling 2020-11-05 11:43:21 +01:00
memstick memstick: Skip allocating card when removing host 2020-10-07 08:01:25 +02:00
message scsi: mptfusion: Fix null pointer dereferences in mptscsih_remove() 2020-11-05 11:43:25 +01:00
mfd mfd: sprd: Add wakeup capability for PMIC IRQ 2020-11-18 19:20:26 +01:00
misc mei: protect mei_cl_mtu from null dereference 2020-11-18 19:20:30 +01:00
mmc mmc: sdhci-pci: Prefer SDR25 timing for High Speed mode for BYT-based Intel controllers 2020-11-24 13:29:24 +01:00
mtd mtd: spi-nor: Don't copy self-pointing struct around 2020-11-10 12:37:28 +01:00
mux
net net/mlx5: Fix wrong address reclaim when command interface is down 2020-12-08 10:40:27 +01:00
nfc nfc: s3fwrn5: use signed integer for parsing GPIO numbers 2020-12-02 08:49:52 +01:00
ntb NTB: hw: amd: fix an issue about leak system resources 2020-10-29 09:58:00 +01:00
nubus
nvdimm libnvdimm/security: ensure sysfs poll thread woke up and fetch updated attr 2020-08-21 13:05:35 +02:00
nvme nvme: free sq/cq dbbuf pointers when dbbuf set fails 2020-12-02 08:49:48 +01:00
nvmem nvmem: core: fix possibly memleak when use nvmem_cell_info_to_nvmem_cell() 2020-10-29 09:57:42 +01:00
of of/address: Fix of_node memory leak in of_dma_is_coherent 2020-11-18 19:20:28 +01:00
opp opp: Reduce the size of critical section in _opp_table_kref_release() 2020-11-18 19:20:21 +01:00
oprofile
parisc parisc: mask out enable and reserved bits from sba imask 2020-08-19 08:16:26 +02:00
parport
pci PCI: qcom: Make sure PCIe is reset before init for rev 2.1.0 2020-11-18 19:20:16 +01:00
pcmcia
perf drivers/perf: thunderx2_pmu: Fix memory resource error handling 2020-10-29 09:57:30 +01:00
phy phy: tegra: xusb: Fix dangling pointer on probe failure 2020-12-02 08:49:50 +01:00
pinctrl pinctrl: baytrail: Fix pin being driven low for a while on gpiod_get(..., GPIOD_OUT_HIGH) 2020-12-11 13:23:27 +01:00
platform platform/x86: toshiba_acpi: Fix the wrong variable assignment 2020-12-02 08:49:53 +01:00
pnp
power power: supply: test_power: add missing newlines when printing parameters by sysfs 2020-11-05 11:43:19 +01:00
powercap powercap: restrict energy meter to root access 2020-11-10 21:13:20 +01:00
pps
ps3
ptp
pwm pwm: img: Fix null pointer access in probe 2020-10-29 09:57:54 +01:00
rapidio rapidio: fix the missed put_device() for rio_mport_add_riodev 2020-10-29 09:57:53 +01:00
ras
regulator regulator: workaround self-referent regulators 2020-11-24 13:29:22 +01:00
remoteproc remoteproc: qcom_q6v5_mss: Validate modem blob firmware size before load 2020-08-21 13:05:29 +02:00
reset
rpmsg rpmsg: glink: Use complete_all for open states 2020-11-05 11:43:20 +01:00
rtc rtc: rx8010: don't modify the global rtc ops 2020-11-05 11:43:33 +01:00
s390 s390/qeth: fix tear down of async TX buffers 2020-12-02 08:49:51 +01:00
sbus
scsi scsi: ufs: Fix race between shutdown and runtime resume flow 2020-12-02 08:49:50 +01:00
sfi
sh
siox
slimbus slimbus: qcom-ngd-ctrl: disable ngd in qmi server down callback 2020-10-29 09:57:42 +01:00
soc soc: fsl: qbman: Fix return value on success 2020-10-29 09:57:59 +01:00
soundwire soundwire: bus: disable pm_runtime in sdw_slave_delete 2020-10-01 13:17:36 +02:00
spi spi: bcm2835aux: Restore err assignment in bcm2835aux_spi_probe 2020-12-02 08:49:54 +01:00
spmi
ssb
staging staging/octeon: fix up merge error 2020-12-08 10:40:24 +01:00
target scsi: target: iscsi: Fix cmd abort fabric stop race 2020-12-02 08:49:49 +01:00
tc
tee optee: add writeback to valid memory type 2020-12-02 08:49:53 +01:00
thermal thermal: rcar_thermal: Handle probe error gracefully 2020-10-01 13:17:44 +02:00
thunderbolt thunderbolt: Add the missed ida_simple_remove() in ring_request_msix() 2020-11-18 19:20:29 +01:00
tty tty: serial: imx: keep console clocks always on 2020-11-24 13:29:20 +01:00
uio uio: Fix use-after-free in uio_unregister_device() 2020-11-18 19:20:29 +01:00
usb USB: core: Fix regression in Hercules audio card 2020-12-02 08:49:56 +01:00
vfio vfio/pci: Bypass IGD init in case of -ENODEV 2020-11-18 19:20:25 +01:00
vhost vhost scsi: fix cmd completion race 2020-12-02 08:49:48 +01:00
video video: hyperv_fb: Fix the cache type when mapping the VRAM 2020-12-02 08:49:51 +01:00
virt drivers/virt/fsl_hypervisor: Fix error handling path 2020-10-29 09:57:38 +01:00
virtio virtio_ring: Avoid loop when vq is broken in virtqueue_poll 2020-08-26 10:40:57 +02:00
visorbus
vlynq
vme
w1 w1: mxc_w1: Fix timeout resolution problem leading to bus error 2020-11-05 11:43:25 +01:00
watchdog drivers: watchdog: rdc321x_wdt: Fix race condition bugs 2020-11-05 11:43:20 +01:00
xen xen/events: block rogue events for some time 2020-11-05 11:43:12 +01:00
zorro
Kconfig
Makefile