forked from luck/tmp_suning_uos_patched
Device tree v3.8 bug fix branch. Fixes an undefined struct device build
error and a missing symbol export. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJQ0l2KAAoJEEFnBt12D9kB+tUQAKMjdtBO4MV9LaSham/yj+bf f7aGoslEFHloXOvP0/Hg8+bP+Z0El5p7ncCZIROtN2pfhYad1CjbZHhwhJeeRMuJ vQT+uy9BZ09pWoSvkLCWdUQyEGYWMxaOQtDMVHEdURU7nRBOPlntrCijoS68pcK8 Tw9XsX69Qurk/Z8q8DXf8hmNF49Cyv8ax1rywqjTTT0yzR+UzQGldXUDqEg9bg/t Qcf03xwUSojdEBQrLo8aaFm32EUguqB02WqS1KMQBaz6FnbqmvVdVyIgVea7kgNi mws1um6/3B/yDYB3ESKNXeZiF1bW03ccdITOeRe+mBDEz0JjnZQmQb30xaT6kjT/ z4VV1DVFAKFQ4M0HlKmv7xvcBcNdzuhrhiFteGNqDkU+zGwgl4GkiSP/c6l0CRVt Ij8jHM+YtLmeI1ajx2V9OhM4xzK1Upo6+zi5zgGxLqflvBnFysBVuLjV8/KdeJ6Z FW5J0iOMbIdRKdBZugj+c47qMuBjXx+BZwUxoaAbgHnFLctkF3cWhc3sLpqNi6pe 6F8GkfEIW8nc6RYLb+Rh4e29mZgAMub+GS3bqKA0bcpOjgm6zwNV27ws7lLxwz2u d5Xf6uB2nfZGSZJtRa8mvqwEFkMoFPwaAD3XX2DmpSPZ0jTX5X1bRMa4u3UA7uJF VIdMKi+ZzuVhLpaMtnXc =srgY -----END PGP SIGNATURE----- mergetag objectbc1008cf7d
type commit tag gpio-for-linus tagger Grant Likely <grant.likely@secretlab.ca> 1355962627 +0000 GPIO device driver bug fixes: - gpio/mvebu-gpio: Make mvebu-gpio depend on OF_CONFIG - gpio/ich: Add missing spinlock init -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJQ0lmWAAoJEEFnBt12D9kBhxEP/0RQ87g52xXFxYpfIRRw6YIY YlXR0noPEJqYnOUGHI0pi+P6mFDvv95etT3khEsuwVkSbb0c0fEl8m6w8O05aTd9 DHdQ4ilvUE77+xO2uZsRN6VxBgnApaj8qMdLWi09yFnSm43wegWTi38IpnY2W4PE /qgTWT+pBraW+l4TQ/dA4hvhsTorH1McnbaNWQG1oNHbrnQ4Q43UII8qR02exz6Y CTgo5qpgvzbz334VQ/VYPgd2NOE1wZ6BihMZr8wNVv25Ip1tWhEh4BbCjpMmGBYC FnHfmKB3zeDdHbsnV2TZc2vC48qnMblGSkMjKsKZn0IOfH2YSym94L0VaXZhCLkw hjtZxrDnbkHzpkLc7inc8IxbTG1wyhtDQhIf9HBzO33QPtdXw2v6GVtLJ0Ca9ikB 1T3XJZPZW+JwaEUdsw4UP7ZkJ7cwRG+fxB3iN57QDKj6Hjy+i/hA3GOjbF1VAOsb xTrLcfnYvQ81BXdMP2rzPo2c/XdwroW6SNNxYq8xkzlVZuRT0kZSObfGSM4zFxKp idfxwHz6ctXB1oni3XBaHmuyRXMZ9zERuyoNARPIJVw0ylSb93eq7dx+j02JOBtc RtrBb1oVtOLiVdn6mIDA4LSELdmcbZdXHW4k84CqyNPWSRG4Sbhx3539r1m90vHw EBnI5XpggxPt/U9qqpxH =JGvn -----END PGP SIGNATURE----- mergetag objectd3601e56cf
type commit tag spi-for-linus tagger Grant Likely <grant.likely@secretlab.ca> 1355962904 +0000 SPI device driver bug fixes branch for the v3.8 merge window. Most of this is bug fixes to the core code and the sh-hspi and s3c64xx device drivers. There is also a patch here to add DT support to the Atmel driver. This one should have been in the first round, but I missed it. It's a low risk change contained within a single driver and the Atmel maintainer has requested it. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJQ0lxNAAoJEEFnBt12D9kBCTMP/0WvS/7iiilM00b5pmclGkRc Ct3832KnZXn5dDYoSsP1AS2PRJAKbrMzvKMZu+ggjOAlwza87rKJJpt+KdU3r15b +KElnaStCC88ohxEOwQV4+CJpF3dS1AmrGMQvo9RK8hddpR1dH+FgMdmex104X/A Ysr0WgqQMY3iGVmnlPxU4EYlR1scnqOpaNADNbMY7ibuJ7LOYk1RYtqmX5yxdnJq yABILFa10qV9N/cqPBu2Cuhw8Xtp/u70dsQPkALG//pyZnFyhw6rMJ6bowOC2IHM p3R4IrVqJq1a3nL1IC1XX5/k21b0PBNxfOGqpeU4QoDK4/cIKeiPny1dtoI1UM+2 mpTU99VvitZ0ywolenKnbPdU61UwZ6Sd+ptsZM0Y/wIMiXDWSBDTZqVJRAbINqFb JwwjtdaFDPgtIb6Yg1WuhLmhcOPfXFIRys7JmnS0VNQCpvvEIdFsR9l5jjMcmluR W7V69z9FZj5lf7WjNstbAxbCvrw1i65OD6Nr1UBAA17bqNU6a9BCWdNJGwLozraR k2ZomvfmIMhTP82z5by5UY39M9B5uGOHDxxXZOOvxzB/fxlYgLhiAGPfMY1FMrPH 48gDqQtdOpakL1B/gVELpBLMoKjwEx9jJa/8tJb5wy8EgNSw06BDSN69OclLgmV/ uVnSZWrp62odDLz0qjSR =trRO -----END PGP SIGNATURE----- Merge tags 'dt-for-linus', 'gpio-for-linus' and 'spi-for-linus' of git://git.secretlab.ca/git/linux-2.6 Pull devicetree, gpio and spi bugfixes from Grant Likely: "Device tree v3.8 bug fix: - Fixes an undefined struct device build error and a missing symbol export. GPIO device driver bug fixes: - gpio/mvebu-gpio: Make mvebu-gpio depend on OF_CONFIG - gpio/ich: Add missing spinlock init SPI device driver bug fixes: - Most of this is bug fixes to the core code and the sh-hspi and s3c64xx device drivers. - There is also a patch here to add DT support to the Atmel driver. This one should have been in the first round, but I missed it. It's a low risk change contained within a single driver and the Atmel maintainer has requested it." * tag 'dt-for-linus' of git://git.secretlab.ca/git/linux-2.6: of: define struct device in of_platform.h if !OF_DEVICE and !OF_ADDRESS of: Fix export of of_find_matching_node_and_match() * tag 'gpio-for-linus' of git://git.secretlab.ca/git/linux-2.6: gpio/mvebu-gpio: Make mvebu-gpio depend on OF_CONFIG gpio/ich: Add missing spinlock init * tag 'spi-for-linus' of git://git.secretlab.ca/git/linux-2.6: spi/sh-hspi: fix return value check in hspi_probe(). spi: fix tegra SPI binding examples spi/atmel: add DT support of/spi: Fix SPI module loading by using proper "spi:" modalias prefixes. spi: Change FIFO flush operation and spi channel off spi: Keep chipselect assertion during one message
This commit is contained in:
commit
e32795503d
@ -13,7 +13,7 @@ Recommended properties:
|
||||
|
||||
Example:
|
||||
|
||||
spi@7000d600 {
|
||||
spi@7000c380 {
|
||||
compatible = "nvidia,tegra20-sflash";
|
||||
reg = <0x7000c380 0x80>;
|
||||
interrupts = <0 39 0x04>;
|
||||
|
@ -13,7 +13,7 @@ Recommended properties:
|
||||
|
||||
Example:
|
||||
|
||||
slink@7000d600 {
|
||||
spi@7000d600 {
|
||||
compatible = "nvidia,tegra20-slink";
|
||||
reg = <0x7000d600 0x200>;
|
||||
interrupts = <0 82 0x04>;
|
||||
|
26
Documentation/devicetree/bindings/spi/spi_atmel.txt
Normal file
26
Documentation/devicetree/bindings/spi/spi_atmel.txt
Normal file
@ -0,0 +1,26 @@
|
||||
Atmel SPI device
|
||||
|
||||
Required properties:
|
||||
- compatible : should be "atmel,at91rm9200-spi".
|
||||
- reg: Address and length of the register set for the device
|
||||
- interrupts: Should contain spi interrupt
|
||||
- cs-gpios: chipselects
|
||||
|
||||
Example:
|
||||
|
||||
spi1: spi@fffcc000 {
|
||||
compatible = "atmel,at91rm9200-spi";
|
||||
reg = <0xfffcc000 0x4000>;
|
||||
interrupts = <13 4 5>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
cs-gpios = <&pioB 3 0>;
|
||||
status = "okay";
|
||||
|
||||
mmc-slot@0 {
|
||||
compatible = "mmc-spi-slot";
|
||||
reg = <0>;
|
||||
gpios = <&pioC 4 0>; /* CD */
|
||||
spi-max-frequency = <25000000>;
|
||||
};
|
||||
};
|
@ -172,6 +172,7 @@ config GPIO_MSM_V2
|
||||
config GPIO_MVEBU
|
||||
def_bool y
|
||||
depends on PLAT_ORION
|
||||
depends on OF
|
||||
select GPIO_GENERIC
|
||||
select GENERIC_IRQ_CHIP
|
||||
|
||||
|
@ -390,6 +390,7 @@ static int ichx_gpio_probe(struct platform_device *pdev)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
spin_lock_init(&ichx_priv.lock);
|
||||
res_base = platform_get_resource(pdev, IORESOURCE_IO, ICH_RES_GPIO);
|
||||
ichx_priv.use_gpio = ich_info->use_gpio;
|
||||
err = ichx_gpio_request_regions(res_base, pdev->name,
|
||||
|
@ -41,7 +41,6 @@
|
||||
#include <linux/io.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
|
||||
/*
|
||||
@ -469,19 +468,6 @@ static void mvebu_gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
|
||||
}
|
||||
}
|
||||
|
||||
static struct platform_device_id mvebu_gpio_ids[] = {
|
||||
{
|
||||
.name = "orion-gpio",
|
||||
}, {
|
||||
.name = "mv78200-gpio",
|
||||
}, {
|
||||
.name = "armadaxp-gpio",
|
||||
}, {
|
||||
/* sentinel */
|
||||
},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(platform, mvebu_gpio_ids);
|
||||
|
||||
static struct of_device_id mvebu_gpio_of_match[] = {
|
||||
{
|
||||
.compatible = "marvell,orion-gpio",
|
||||
@ -555,9 +541,7 @@ static int mvebu_gpio_probe(struct platform_device *pdev)
|
||||
mvchip->chip.base = id * MVEBU_MAX_GPIO_PER_BANK;
|
||||
mvchip->chip.ngpio = ngpios;
|
||||
mvchip->chip.can_sleep = 0;
|
||||
#ifdef CONFIG_OF
|
||||
mvchip->chip.of_node = np;
|
||||
#endif
|
||||
|
||||
spin_lock_init(&mvchip->lock);
|
||||
mvchip->membase = devm_request_and_ioremap(&pdev->dev, res);
|
||||
@ -698,7 +682,6 @@ static struct platform_driver mvebu_gpio_driver = {
|
||||
.of_match_table = mvebu_gpio_of_match,
|
||||
},
|
||||
.probe = mvebu_gpio_probe,
|
||||
.id_table = mvebu_gpio_ids,
|
||||
};
|
||||
|
||||
static int __init mvebu_gpio_init(void)
|
||||
|
@ -629,7 +629,7 @@ struct device_node *of_find_matching_node_and_match(struct device_node *from,
|
||||
read_unlock(&devtree_lock);
|
||||
return np;
|
||||
}
|
||||
EXPORT_SYMBOL(of_find_matching_node);
|
||||
EXPORT_SYMBOL(of_find_matching_node_and_match);
|
||||
|
||||
/**
|
||||
* of_modalias_node - Lookup appropriate modalias for a device node
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/platform_data/atmel.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/gpio.h>
|
||||
@ -768,6 +769,10 @@ static int atmel_spi_setup(struct spi_device *spi)
|
||||
|
||||
/* chipselect must have been muxed as GPIO (e.g. in board setup) */
|
||||
npcs_pin = (unsigned int)spi->controller_data;
|
||||
|
||||
if (gpio_is_valid(spi->cs_gpio))
|
||||
npcs_pin = spi->cs_gpio;
|
||||
|
||||
asd = spi->controller_state;
|
||||
if (!asd) {
|
||||
asd = kzalloc(sizeof(struct atmel_spi_device), GFP_KERNEL);
|
||||
@ -937,8 +942,9 @@ static int atmel_spi_probe(struct platform_device *pdev)
|
||||
/* the spi->mode bits understood by this driver: */
|
||||
master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
|
||||
|
||||
master->dev.of_node = pdev->dev.of_node;
|
||||
master->bus_num = pdev->id;
|
||||
master->num_chipselect = 4;
|
||||
master->num_chipselect = master->dev.of_node ? 0 : 4;
|
||||
master->setup = atmel_spi_setup;
|
||||
master->transfer = atmel_spi_transfer;
|
||||
master->cleanup = atmel_spi_cleanup;
|
||||
@ -1064,11 +1070,20 @@ static int atmel_spi_resume(struct platform_device *pdev)
|
||||
#define atmel_spi_resume NULL
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_OF)
|
||||
static const struct of_device_id atmel_spi_dt_ids[] = {
|
||||
{ .compatible = "atmel,at91rm9200-spi" },
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
|
||||
MODULE_DEVICE_TABLE(of, atmel_spi_dt_ids);
|
||||
#endif
|
||||
|
||||
static struct platform_driver atmel_spi_driver = {
|
||||
.driver = {
|
||||
.name = "atmel_spi",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(atmel_spi_dt_ids),
|
||||
},
|
||||
.suspend = atmel_spi_suspend,
|
||||
.resume = atmel_spi_resume,
|
||||
|
@ -214,6 +214,10 @@ static void flush_fifo(struct s3c64xx_spi_driver_data *sdd)
|
||||
|
||||
writel(0, regs + S3C64XX_SPI_PACKET_CNT);
|
||||
|
||||
val = readl(regs + S3C64XX_SPI_CH_CFG);
|
||||
val &= ~(S3C64XX_SPI_CH_RXCH_ON | S3C64XX_SPI_CH_TXCH_ON);
|
||||
writel(val, regs + S3C64XX_SPI_CH_CFG);
|
||||
|
||||
val = readl(regs + S3C64XX_SPI_CH_CFG);
|
||||
val |= S3C64XX_SPI_CH_SW_RST;
|
||||
val &= ~S3C64XX_SPI_CH_HS_EN;
|
||||
@ -248,10 +252,6 @@ static void flush_fifo(struct s3c64xx_spi_driver_data *sdd)
|
||||
val = readl(regs + S3C64XX_SPI_MODE_CFG);
|
||||
val &= ~(S3C64XX_SPI_MODE_TXDMA_ON | S3C64XX_SPI_MODE_RXDMA_ON);
|
||||
writel(val, regs + S3C64XX_SPI_MODE_CFG);
|
||||
|
||||
val = readl(regs + S3C64XX_SPI_CH_CFG);
|
||||
val &= ~(S3C64XX_SPI_CH_RXCH_ON | S3C64XX_SPI_CH_TXCH_ON);
|
||||
writel(val, regs + S3C64XX_SPI_CH_CFG);
|
||||
}
|
||||
|
||||
static void s3c64xx_spi_dmacb(void *data)
|
||||
@ -771,8 +771,6 @@ static int s3c64xx_spi_transfer_one_message(struct spi_master *master,
|
||||
if (list_is_last(&xfer->transfer_list,
|
||||
&msg->transfers))
|
||||
cs_toggle = 1;
|
||||
else
|
||||
disable_cs(sdd, spi);
|
||||
}
|
||||
|
||||
msg->actual_length += xfer->len;
|
||||
|
@ -290,7 +290,7 @@ static int hspi_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
clk = clk_get(NULL, "shyway_clk");
|
||||
if (!clk) {
|
||||
if (IS_ERR(clk)) {
|
||||
dev_err(&pdev->dev, "shyway_clk is required\n");
|
||||
ret = -EINVAL;
|
||||
goto error0;
|
||||
|
@ -824,6 +824,7 @@ static void of_register_spi_devices(struct spi_master *master)
|
||||
struct spi_device *spi;
|
||||
struct device_node *nc;
|
||||
const __be32 *prop;
|
||||
char modalias[SPI_NAME_SIZE + 4];
|
||||
int rc;
|
||||
int len;
|
||||
|
||||
@ -887,7 +888,9 @@ static void of_register_spi_devices(struct spi_master *master)
|
||||
spi->dev.of_node = nc;
|
||||
|
||||
/* Register the new device */
|
||||
request_module(spi->modalias);
|
||||
snprintf(modalias, sizeof(modalias), "%s%s", SPI_MODULE_PREFIX,
|
||||
spi->modalias);
|
||||
request_module(modalias);
|
||||
rc = spi_add_device(spi);
|
||||
if (rc) {
|
||||
dev_err(&master->dev, "spi_device register error %s\n",
|
||||
|
@ -100,6 +100,7 @@ extern int of_platform_populate(struct device_node *root,
|
||||
|
||||
#if !defined(CONFIG_OF_ADDRESS)
|
||||
struct of_dev_auxdata;
|
||||
struct device;
|
||||
static inline int of_platform_populate(struct device_node *root,
|
||||
const struct of_device_id *matches,
|
||||
const struct of_dev_auxdata *lookup,
|
||||
|
Loading…
Reference in New Issue
Block a user