mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-27 03:35:36 +07:00
staging: wfx: add proper "compatible" string
Add "compatible" string matching "vendor,chip" template and proper GPIO flags handling. Keep support for old name and reset polarity for older devicetrees. Cc: stable@vger.kernel.org #d3a5bcb4a1
("gpio: add gpiod_toggle_active_low()") Cc: stable@vger.kernel.org Fixes:0096214a59
("staging: wfx: add support for I/O access") Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> Link: https://lore.kernel.org/r/0e6dda06f145676861860f073a53dc95987c7ab5.1581416843.git.mirq-linux@rere.qmqm.pl Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
e2525a95cc
commit
eec6e3ee63
@ -6,7 +6,7 @@ SPI
|
||||
You have to declare the WFxxx chip in your device tree.
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be "silabs,wfx-spi"
|
||||
- compatible: Should be "silabs,wf200"
|
||||
- reg: Chip select address of device
|
||||
- spi-max-frequency: Maximum SPI clocking speed of device in Hz
|
||||
- interrupts-extended: Should contain interrupt line (interrupt-parent +
|
||||
@ -15,6 +15,7 @@ Required properties:
|
||||
Optional properties:
|
||||
- reset-gpios: phandle of gpio that will be used to reset chip during probe.
|
||||
Without this property, you may encounter issues with warm boot.
|
||||
(Legacy: when compatible == "silabs,wfx-spi", the gpio is inverted.)
|
||||
|
||||
Please consult Documentation/devicetree/bindings/spi/spi-bus.txt for optional
|
||||
SPI connection related properties,
|
||||
@ -23,12 +24,12 @@ Example:
|
||||
|
||||
&spi1 {
|
||||
wfx {
|
||||
compatible = "silabs,wfx-spi";
|
||||
compatible = "silabs,wf200";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&wfx_irq &wfx_gpios>;
|
||||
interrupts-extended = <&gpio 16 IRQ_TYPE_EDGE_RISING>;
|
||||
wakeup-gpios = <&gpio 12 GPIO_ACTIVE_HIGH>;
|
||||
reset-gpios = <&gpio 13 GPIO_ACTIVE_HIGH>;
|
||||
reset-gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
|
||||
reg = <0>;
|
||||
spi-max-frequency = <42000000>;
|
||||
};
|
||||
|
@ -27,6 +27,8 @@ MODULE_PARM_DESC(gpio_reset, "gpio number for reset. -1 for none.");
|
||||
#define SET_WRITE 0x7FFF /* usage: and operation */
|
||||
#define SET_READ 0x8000 /* usage: or operation */
|
||||
|
||||
#define WFX_RESET_INVERTED 1
|
||||
|
||||
static const struct wfx_platform_data wfx_spi_pdata = {
|
||||
.file_fw = "wfm_wf200",
|
||||
.file_pds = "wf200.pds",
|
||||
@ -206,9 +208,11 @@ static int wfx_spi_probe(struct spi_device *func)
|
||||
if (!bus->gpio_reset) {
|
||||
dev_warn(&func->dev, "try to load firmware anyway\n");
|
||||
} else {
|
||||
gpiod_set_value(bus->gpio_reset, 0);
|
||||
udelay(100);
|
||||
if (spi_get_device_id(func)->driver_data & WFX_RESET_INVERTED)
|
||||
gpiod_toggle_active_low(bus->gpio_reset);
|
||||
gpiod_set_value(bus->gpio_reset, 1);
|
||||
udelay(100);
|
||||
gpiod_set_value(bus->gpio_reset, 0);
|
||||
udelay(2000);
|
||||
}
|
||||
|
||||
@ -245,14 +249,16 @@ static int wfx_spi_remove(struct spi_device *func)
|
||||
* stripped.
|
||||
*/
|
||||
static const struct spi_device_id wfx_spi_id[] = {
|
||||
{ "wfx-spi", 0 },
|
||||
{ "wfx-spi", WFX_RESET_INVERTED },
|
||||
{ "wf200", 0 },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(spi, wfx_spi_id);
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
static const struct of_device_id wfx_spi_of_match[] = {
|
||||
{ .compatible = "silabs,wfx-spi" },
|
||||
{ .compatible = "silabs,wfx-spi", .data = (void *)WFX_RESET_INVERTED },
|
||||
{ .compatible = "silabs,wf200" },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, wfx_spi_of_match);
|
||||
|
Loading…
Reference in New Issue
Block a user