Signed-off-by: Zhao, Gang <gang.zhao...@gmail.com> --- ...io-74x164-improve-platform-device-support.patch | 64 ++++++++++------------ 1 file changed, 30 insertions(+), 34 deletions(-)
diff --git a/target/linux/ar71xx/patches-3.14/451-gpio-74x164-improve-platform-device-support.patch b/target/linux/ar71xx/patches-3.14/451-gpio-74x164-improve-platform-device-support.patch index b19bb85..ed95f5e 100644 --- a/target/linux/ar71xx/patches-3.14/451-gpio-74x164-improve-platform-device-support.patch +++ b/target/linux/ar71xx/patches-3.14/451-gpio-74x164-improve-platform-device-support.patch @@ -1,38 +1,33 @@ --- a/drivers/gpio/gpio-74x164.c +++ b/drivers/gpio/gpio-74x164.c -@@ -109,10 +109,14 @@ static int gen_74x164_probe(struct spi_d +@@ -107,8 +107,18 @@ static int gen_74x164_direction_output(s + static int gen_74x164_probe(struct spi_device *spi) { struct gen_74x164_chip *chip; - struct gen_74x164_chip_platform_data *pdata; ++ struct gen_74x164_chip_platform_data *pdata; + struct device_node *np; int ret; -- if (!spi->dev.of_node) { -- dev_err(&spi->dev, "No device tree data available.\n"); + pdata = spi->dev.platform_data; + np = spi->dev.of_node; + + if (!np && !pdata) { + dev_err(&spi->dev, "No configuration data available.\n"); - return -EINVAL; - } - -@@ -129,7 +133,6 @@ static int gen_74x164_probe(struct spi_d - if (!chip) - return -ENOMEM; - -- pdata = spi->dev.platform_data; - if (pdata && pdata->base) - chip->gpio_chip.base = pdata->base; - else -@@ -146,12 +149,19 @@ static int gen_74x164_probe(struct spi_d - chip->gpio_chip.get = gen_74x164_get_value; ++ return -EINVAL; ++ } ++ + /* + * bits_per_word cannot be configured in platform data + */ +@@ -130,18 +140,27 @@ static int gen_74x164_probe(struct spi_d chip->gpio_chip.set = gen_74x164_set_value; + chip->gpio_chip.base = -1; -- if (of_property_read_u32(spi->dev.of_node, "registers-number", &chip->registers)) { -- dev_err(&spi->dev, "Missing registers-number property in the DT.\n"); -- ret = -EINVAL; -- goto exit_destroy; +- if (of_property_read_u32(spi->dev.of_node, "registers-number", +- &chip->registers)) { +- dev_err(&spi->dev, +- "Missing registers-number property in the DT.\n"); +- return -EINVAL; + if (np) { + if (of_property_read_u32(spi->dev.of_node, "registers-number", &chip->registers)) { + dev_err(&spi->dev, "Missing registers-number property in the DT.\n"); @@ -48,27 +43,28 @@ + chip->gpio_chip.ngpio = GEN_74X164_NUMBER_GPIOS * chip->registers; chip->buffer = devm_kzalloc(&spi->dev, chip->registers, GFP_KERNEL); - if (!chip->buffer) { -@@ -159,6 +169,9 @@ static int gen_74x164_probe(struct spi_d - goto exit_destroy; - } + if (!chip->buffer) + return -ENOMEM; + if (pdata && pdata->init_data) + memcpy(chip->buffer, pdata->init_data, chip->registers); + - chip->gpio_chip.can_sleep = 1; + chip->gpio_chip.can_sleep = true; chip->gpio_chip.dev = &spi->dev; chip->gpio_chip.owner = THIS_MODULE; ---- a/include/linux/spi/74x164.h +--- /dev/null +++ b/include/linux/spi/74x164.h -@@ -4,6 +4,10 @@ - struct gen_74x164_chip_platform_data { - /* number assigned to the first GPIO */ - unsigned base; +@@ -0,0 +1,13 @@ ++#ifndef LINUX_SPI_74X164_H ++#define LINUX_SPI_74X164_H ++ ++struct gen_74x164_chip_platform_data { ++ /* number assigned to the first GPIO */ ++ unsigned base; + /* number of chained registers */ + unsigned num_registers; + /* address of a buffer containing initial data */ + u8 *init_data; - }; - - #endif ++}; ++ ++#endif -- 1.9.3 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel