aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-09-12 16:59:31 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-09-12 16:59:31 -0400
commit3cc69b638e11bfda5d013c2b75b60934aa0e88a1 (patch)
tree92b63b61e0b51572e2fe7476956ddacc720ee8fa
parent0e6a1fb1167b8d230c6edcebd31e173cd0add1e5 (diff)
parentf7ec00b3a5e6c18be350ce44dd8c03b36a8fda02 (diff)
Merge tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC fixes from Olof Johansson: "A small batch of fixes that have trickled in over the last week of the merge window. Also included are few small devicetree updates for sunxi, since it enables me to use one of their newer boards (cubieboard2) for additional test coverage. The support for that SoC is new for 3.12, so there's no exposure to new regressions due to it" * tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: ARM: dts: sun7i: olinuxino-micro: Enable the EMAC ARM: dts: sun7i: cubieboard2: Enable the EMAC ARM: dts: sun7i: Add the muxing options for the EMAC ARM: dts: sun7i: Enable the Ethernet in the A20 i2c: davinci: Fix bad dev_get_platdata() conversion ARM: vexpress: allow dcscb and tc2_pm in a combined ARMv6+v7 build ARM: shmobile: lager: Do not use register_type field of struct sh_eth_plat_data ARM: pxa: ssp: Check return values from phandle lookups ARM: PCI: versatile: Fix SMAP register offsets ARM: PCI: versatile: Fix PCI I/O ARM: PCI: versatile: Fix map_irq function to match hardware ARM: ep93xx: Don't use modem interface on the second UART ARM: shmobile: r8a7779: Update early timer initialisation order
-rw-r--r--arch/arm/boot/dts/sun7i-a20-cubieboard2.dts15
-rw-r--r--arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts15
-rw-r--r--arch/arm/boot/dts/sun7i-a20.dtsi27
-rw-r--r--arch/arm/mach-ep93xx/core.c2
-rw-r--r--arch/arm/mach-shmobile/board-lager.c1
-rw-r--r--arch/arm/mach-shmobile/setup-r8a7779.c2
-rw-r--r--arch/arm/mach-versatile/include/mach/platform.h2
-rw-r--r--arch/arm/mach-versatile/pci.c47
-rw-r--r--arch/arm/mach-vexpress/Makefile2
-rw-r--r--arch/arm/plat-pxa/ssp.c18
-rw-r--r--drivers/i2c/busses/i2c-davinci.c2
11 files changed, 108 insertions, 25 deletions
diff --git a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
index 31b76f08b3ad..15e625eca312 100644
--- a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
+++ b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
@@ -19,6 +19,21 @@
19 compatible = "cubietech,cubieboard2", "allwinner,sun7i-a20"; 19 compatible = "cubietech,cubieboard2", "allwinner,sun7i-a20";
20 20
21 soc@01c00000 { 21 soc@01c00000 {
22 emac: ethernet@01c0b000 {
23 pinctrl-names = "default";
24 pinctrl-0 = <&emac_pins_a>;
25 phy = <&phy1>;
26 status = "okay";
27 };
28
29 mdio@01c0b080 {
30 status = "okay";
31
32 phy1: ethernet-phy@1 {
33 reg = <1>;
34 };
35 };
36
22 pinctrl@01c20800 { 37 pinctrl@01c20800 {
23 led_pins_cubieboard2: led_pins@0 { 38 led_pins_cubieboard2: led_pins@0 {
24 allwinner,pins = "PH20", "PH21"; 39 allwinner,pins = "PH20", "PH21";
diff --git a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
index 34a6c02a7c72..9e778557fadb 100644
--- a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
+++ b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
@@ -19,6 +19,21 @@
19 compatible = "olimex,a20-olinuxino-micro", "allwinner,sun7i-a20"; 19 compatible = "olimex,a20-olinuxino-micro", "allwinner,sun7i-a20";
20 20
21 soc@01c00000 { 21 soc@01c00000 {
22 emac: ethernet@01c0b000 {
23 pinctrl-names = "default";
24 pinctrl-0 = <&emac_pins_a>;
25 phy = <&phy1>;
26 status = "okay";
27 };
28
29 mdio@01c0b080 {
30 status = "okay";
31
32 phy1: ethernet-phy@1 {
33 reg = <1>;
34 };
35 };
36
22 pinctrl@01c20800 { 37 pinctrl@01c20800 {
23 led_pins_olinuxino: led_pins@0 { 38 led_pins_olinuxino: led_pins@0 {
24 allwinner,pins = "PH2"; 39 allwinner,pins = "PH2";
diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
index 999ff45cb77e..80559cbdbc87 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
@@ -167,6 +167,22 @@
167 #size-cells = <1>; 167 #size-cells = <1>;
168 ranges; 168 ranges;
169 169
170 emac: ethernet@01c0b000 {
171 compatible = "allwinner,sun4i-emac";
172 reg = <0x01c0b000 0x1000>;
173 interrupts = <0 55 1>;
174 clocks = <&ahb_gates 17>;
175 status = "disabled";
176 };
177
178 mdio@01c0b080 {
179 compatible = "allwinner,sun4i-mdio";
180 reg = <0x01c0b080 0x14>;
181 status = "disabled";
182 #address-cells = <1>;
183 #size-cells = <0>;
184 };
185
170 pio: pinctrl@01c20800 { 186 pio: pinctrl@01c20800 {
171 compatible = "allwinner,sun7i-a20-pinctrl"; 187 compatible = "allwinner,sun7i-a20-pinctrl";
172 reg = <0x01c20800 0x400>; 188 reg = <0x01c20800 0x400>;
@@ -198,6 +214,17 @@
198 allwinner,drive = <0>; 214 allwinner,drive = <0>;
199 allwinner,pull = <0>; 215 allwinner,pull = <0>;
200 }; 216 };
217
218 emac_pins_a: emac0@0 {
219 allwinner,pins = "PA0", "PA1", "PA2",
220 "PA3", "PA4", "PA5", "PA6",
221 "PA7", "PA8", "PA9", "PA10",
222 "PA11", "PA12", "PA13", "PA14",
223 "PA15", "PA16";
224 allwinner,function = "emac";
225 allwinner,drive = <0>;
226 allwinner,pull = <0>;
227 };
201 }; 228 };
202 229
203 timer@01c20c00 { 230 timer@01c20c00 {
diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
index df8612fbbc9c..3f12b885c083 100644
--- a/arch/arm/mach-ep93xx/core.c
+++ b/arch/arm/mach-ep93xx/core.c
@@ -281,7 +281,7 @@ static AMBA_APB_DEVICE(uart1, "apb:uart1", 0x00041010, EP93XX_UART1_PHYS_BASE,
281 { IRQ_EP93XX_UART1 }, &ep93xx_uart_data); 281 { IRQ_EP93XX_UART1 }, &ep93xx_uart_data);
282 282
283static AMBA_APB_DEVICE(uart2, "apb:uart2", 0x00041010, EP93XX_UART2_PHYS_BASE, 283static AMBA_APB_DEVICE(uart2, "apb:uart2", 0x00041010, EP93XX_UART2_PHYS_BASE,
284 { IRQ_EP93XX_UART2 }, &ep93xx_uart_data); 284 { IRQ_EP93XX_UART2 }, NULL);
285 285
286static AMBA_APB_DEVICE(uart3, "apb:uart3", 0x00041010, EP93XX_UART3_PHYS_BASE, 286static AMBA_APB_DEVICE(uart3, "apb:uart3", 0x00041010, EP93XX_UART3_PHYS_BASE,
287 { IRQ_EP93XX_UART3 }, &ep93xx_uart_data); 287 { IRQ_EP93XX_UART3 }, &ep93xx_uart_data);
diff --git a/arch/arm/mach-shmobile/board-lager.c b/arch/arm/mach-shmobile/board-lager.c
index 4872939cdba2..ffb6f0ac7606 100644
--- a/arch/arm/mach-shmobile/board-lager.c
+++ b/arch/arm/mach-shmobile/board-lager.c
@@ -96,7 +96,6 @@ static struct resource mmcif1_resources[] __initdata = {
96static struct sh_eth_plat_data ether_pdata __initdata = { 96static struct sh_eth_plat_data ether_pdata __initdata = {
97 .phy = 0x1, 97 .phy = 0x1,
98 .edmac_endian = EDMAC_LITTLE_ENDIAN, 98 .edmac_endian = EDMAC_LITTLE_ENDIAN,
99 .register_type = SH_ETH_REG_FAST_RCAR,
100 .phy_interface = PHY_INTERFACE_MODE_RMII, 99 .phy_interface = PHY_INTERFACE_MODE_RMII,
101 .ether_link_active_low = 1, 100 .ether_link_active_low = 1,
102}; 101};
diff --git a/arch/arm/mach-shmobile/setup-r8a7779.c b/arch/arm/mach-shmobile/setup-r8a7779.c
index b5b2f787da2e..ecd0148ee1e1 100644
--- a/arch/arm/mach-shmobile/setup-r8a7779.c
+++ b/arch/arm/mach-shmobile/setup-r8a7779.c
@@ -691,8 +691,8 @@ void __init __weak r8a7779_register_twd(void) { }
691void __init r8a7779_earlytimer_init(void) 691void __init r8a7779_earlytimer_init(void)
692{ 692{
693 r8a7779_clock_init(); 693 r8a7779_clock_init();
694 shmobile_earlytimer_init();
695 r8a7779_register_twd(); 694 r8a7779_register_twd();
695 shmobile_earlytimer_init();
696} 696}
697 697
698void __init r8a7779_add_early_devices(void) 698void __init r8a7779_add_early_devices(void)
diff --git a/arch/arm/mach-versatile/include/mach/platform.h b/arch/arm/mach-versatile/include/mach/platform.h
index ec087407b163..6f938ccb0c54 100644
--- a/arch/arm/mach-versatile/include/mach/platform.h
+++ b/arch/arm/mach-versatile/include/mach/platform.h
@@ -231,12 +231,14 @@
231/* PCI space */ 231/* PCI space */
232#define VERSATILE_PCI_BASE 0x41000000 /* PCI Interface */ 232#define VERSATILE_PCI_BASE 0x41000000 /* PCI Interface */
233#define VERSATILE_PCI_CFG_BASE 0x42000000 233#define VERSATILE_PCI_CFG_BASE 0x42000000
234#define VERSATILE_PCI_IO_BASE 0x43000000
234#define VERSATILE_PCI_MEM_BASE0 0x44000000 235#define VERSATILE_PCI_MEM_BASE0 0x44000000
235#define VERSATILE_PCI_MEM_BASE1 0x50000000 236#define VERSATILE_PCI_MEM_BASE1 0x50000000
236#define VERSATILE_PCI_MEM_BASE2 0x60000000 237#define VERSATILE_PCI_MEM_BASE2 0x60000000
237/* Sizes of above maps */ 238/* Sizes of above maps */
238#define VERSATILE_PCI_BASE_SIZE 0x01000000 239#define VERSATILE_PCI_BASE_SIZE 0x01000000
239#define VERSATILE_PCI_CFG_BASE_SIZE 0x02000000 240#define VERSATILE_PCI_CFG_BASE_SIZE 0x02000000
241#define VERSATILE_PCI_IO_BASE_SIZE 0x01000000
240#define VERSATILE_PCI_MEM_BASE0_SIZE 0x0c000000 /* 32Mb */ 242#define VERSATILE_PCI_MEM_BASE0_SIZE 0x0c000000 /* 32Mb */
241#define VERSATILE_PCI_MEM_BASE1_SIZE 0x10000000 /* 256Mb */ 243#define VERSATILE_PCI_MEM_BASE1_SIZE 0x10000000 /* 256Mb */
242#define VERSATILE_PCI_MEM_BASE2_SIZE 0x10000000 /* 256Mb */ 244#define VERSATILE_PCI_MEM_BASE2_SIZE 0x10000000 /* 256Mb */
diff --git a/arch/arm/mach-versatile/pci.c b/arch/arm/mach-versatile/pci.c
index e92e5e0705bc..c97be4ea76d2 100644
--- a/arch/arm/mach-versatile/pci.c
+++ b/arch/arm/mach-versatile/pci.c
@@ -43,9 +43,9 @@
43#define PCI_IMAP0 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x0) 43#define PCI_IMAP0 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x0)
44#define PCI_IMAP1 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x4) 44#define PCI_IMAP1 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x4)
45#define PCI_IMAP2 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x8) 45#define PCI_IMAP2 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x8)
46#define PCI_SMAP0 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x10) 46#define PCI_SMAP0 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x14)
47#define PCI_SMAP1 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x14) 47#define PCI_SMAP1 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x18)
48#define PCI_SMAP2 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x18) 48#define PCI_SMAP2 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x1c)
49#define PCI_SELFID __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0xc) 49#define PCI_SELFID __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0xc)
50 50
51#define DEVICE_ID_OFFSET 0x00 51#define DEVICE_ID_OFFSET 0x00
@@ -170,8 +170,8 @@ static struct pci_ops pci_versatile_ops = {
170 .write = versatile_write_config, 170 .write = versatile_write_config,
171}; 171};
172 172
173static struct resource io_mem = { 173static struct resource unused_mem = {
174 .name = "PCI I/O space", 174 .name = "PCI unused",
175 .start = VERSATILE_PCI_MEM_BASE0, 175 .start = VERSATILE_PCI_MEM_BASE0,
176 .end = VERSATILE_PCI_MEM_BASE0+VERSATILE_PCI_MEM_BASE0_SIZE-1, 176 .end = VERSATILE_PCI_MEM_BASE0+VERSATILE_PCI_MEM_BASE0_SIZE-1,
177 .flags = IORESOURCE_MEM, 177 .flags = IORESOURCE_MEM,
@@ -195,9 +195,9 @@ static int __init pci_versatile_setup_resources(struct pci_sys_data *sys)
195{ 195{
196 int ret = 0; 196 int ret = 0;
197 197
198 ret = request_resource(&iomem_resource, &io_mem); 198 ret = request_resource(&iomem_resource, &unused_mem);
199 if (ret) { 199 if (ret) {
200 printk(KERN_ERR "PCI: unable to allocate I/O " 200 printk(KERN_ERR "PCI: unable to allocate unused "
201 "memory region (%d)\n", ret); 201 "memory region (%d)\n", ret);
202 goto out; 202 goto out;
203 } 203 }
@@ -205,7 +205,7 @@ static int __init pci_versatile_setup_resources(struct pci_sys_data *sys)
205 if (ret) { 205 if (ret) {
206 printk(KERN_ERR "PCI: unable to allocate non-prefetchable " 206 printk(KERN_ERR "PCI: unable to allocate non-prefetchable "
207 "memory region (%d)\n", ret); 207 "memory region (%d)\n", ret);
208 goto release_io_mem; 208 goto release_unused_mem;
209 } 209 }
210 ret = request_resource(&iomem_resource, &pre_mem); 210 ret = request_resource(&iomem_resource, &pre_mem);
211 if (ret) { 211 if (ret) {
@@ -225,8 +225,8 @@ static int __init pci_versatile_setup_resources(struct pci_sys_data *sys)
225 225
226 release_non_mem: 226 release_non_mem:
227 release_resource(&non_mem); 227 release_resource(&non_mem);
228 release_io_mem: 228 release_unused_mem:
229 release_resource(&io_mem); 229 release_resource(&unused_mem);
230 out: 230 out:
231 return ret; 231 return ret;
232} 232}
@@ -246,7 +246,7 @@ int __init pci_versatile_setup(int nr, struct pci_sys_data *sys)
246 goto out; 246 goto out;
247 } 247 }
248 248
249 ret = pci_ioremap_io(0, VERSATILE_PCI_MEM_BASE0); 249 ret = pci_ioremap_io(0, VERSATILE_PCI_IO_BASE);
250 if (ret) 250 if (ret)
251 goto out; 251 goto out;
252 252
@@ -295,6 +295,19 @@ int __init pci_versatile_setup(int nr, struct pci_sys_data *sys)
295 __raw_writel(PHYS_OFFSET, local_pci_cfg_base + PCI_BASE_ADDRESS_2); 295 __raw_writel(PHYS_OFFSET, local_pci_cfg_base + PCI_BASE_ADDRESS_2);
296 296
297 /* 297 /*
298 * For many years the kernel and QEMU were symbiotically buggy
299 * in that they both assumed the same broken IRQ mapping.
300 * QEMU therefore attempts to auto-detect old broken kernels
301 * so that they still work on newer QEMU as they did on old
302 * QEMU. Since we now use the correct (ie matching-hardware)
303 * IRQ mapping we write a definitely different value to a
304 * PCI_INTERRUPT_LINE register to tell QEMU that we expect
305 * real hardware behaviour and it need not be backwards
306 * compatible for us. This write is harmless on real hardware.
307 */
308 __raw_writel(0, VERSATILE_PCI_VIRT_BASE+PCI_INTERRUPT_LINE);
309
310 /*
298 * Do not to map Versatile FPGA PCI device into memory space 311 * Do not to map Versatile FPGA PCI device into memory space
299 */ 312 */
300 pci_slot_ignore |= (1 << myslot); 313 pci_slot_ignore |= (1 << myslot);
@@ -327,13 +340,13 @@ static int __init versatile_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
327{ 340{
328 int irq; 341 int irq;
329 342
330 /* slot, pin, irq 343 /*
331 * 24 1 IRQ_SIC_PCI0 344 * Slot INTA INTB INTC INTD
332 * 25 1 IRQ_SIC_PCI1 345 * 31 PCI1 PCI2 PCI3 PCI0
333 * 26 1 IRQ_SIC_PCI2 346 * 30 PCI0 PCI1 PCI2 PCI3
334 * 27 1 IRQ_SIC_PCI3 347 * 29 PCI3 PCI0 PCI1 PCI2
335 */ 348 */
336 irq = IRQ_SIC_PCI0 + ((slot - 24 + pin - 1) & 3); 349 irq = IRQ_SIC_PCI0 + ((slot + 2 + pin - 1) & 3);
337 350
338 return irq; 351 return irq;
339} 352}
diff --git a/arch/arm/mach-vexpress/Makefile b/arch/arm/mach-vexpress/Makefile
index 36ea8247123a..505e64ab3eae 100644
--- a/arch/arm/mach-vexpress/Makefile
+++ b/arch/arm/mach-vexpress/Makefile
@@ -7,6 +7,8 @@ ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \
7obj-y := v2m.o 7obj-y := v2m.o
8obj-$(CONFIG_ARCH_VEXPRESS_CA9X4) += ct-ca9x4.o 8obj-$(CONFIG_ARCH_VEXPRESS_CA9X4) += ct-ca9x4.o
9obj-$(CONFIG_ARCH_VEXPRESS_DCSCB) += dcscb.o dcscb_setup.o 9obj-$(CONFIG_ARCH_VEXPRESS_DCSCB) += dcscb.o dcscb_setup.o
10CFLAGS_dcscb.o += -march=armv7-a
10obj-$(CONFIG_ARCH_VEXPRESS_TC2_PM) += tc2_pm.o spc.o 11obj-$(CONFIG_ARCH_VEXPRESS_TC2_PM) += tc2_pm.o spc.o
12CFLAGS_tc2_pm.o += -march=armv7-a
11obj-$(CONFIG_SMP) += platsmp.o 13obj-$(CONFIG_SMP) += platsmp.o
12obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o 14obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
diff --git a/arch/arm/plat-pxa/ssp.c b/arch/arm/plat-pxa/ssp.c
index c83f27b6bdda..3ea02903d75a 100644
--- a/arch/arm/plat-pxa/ssp.c
+++ b/arch/arm/plat-pxa/ssp.c
@@ -132,6 +132,7 @@ static int pxa_ssp_probe(struct platform_device *pdev)
132 if (dev->of_node) { 132 if (dev->of_node) {
133 struct of_phandle_args dma_spec; 133 struct of_phandle_args dma_spec;
134 struct device_node *np = dev->of_node; 134 struct device_node *np = dev->of_node;
135 int ret;
135 136
136 /* 137 /*
137 * FIXME: we should allocate the DMA channel from this 138 * FIXME: we should allocate the DMA channel from this
@@ -140,14 +141,23 @@ static int pxa_ssp_probe(struct platform_device *pdev)
140 */ 141 */
141 142
142 /* rx */ 143 /* rx */
143 of_parse_phandle_with_args(np, "dmas", "#dma-cells", 144 ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells",
144 0, &dma_spec); 145 0, &dma_spec);
146
147 if (ret) {
148 dev_err(dev, "Can't parse dmas property\n");
149 return -ENODEV;
150 }
145 ssp->drcmr_rx = dma_spec.args[0]; 151 ssp->drcmr_rx = dma_spec.args[0];
146 of_node_put(dma_spec.np); 152 of_node_put(dma_spec.np);
147 153
148 /* tx */ 154 /* tx */
149 of_parse_phandle_with_args(np, "dmas", "#dma-cells", 155 ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells",
150 1, &dma_spec); 156 1, &dma_spec);
157 if (ret) {
158 dev_err(dev, "Can't parse dmas property\n");
159 return -ENODEV;
160 }
151 ssp->drcmr_tx = dma_spec.args[0]; 161 ssp->drcmr_tx = dma_spec.args[0];
152 of_node_put(dma_spec.np); 162 of_node_put(dma_spec.np);
153 } else { 163 } else {
diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c
index 57473415be10..132369fad4e0 100644
--- a/drivers/i2c/busses/i2c-davinci.c
+++ b/drivers/i2c/busses/i2c-davinci.c
@@ -662,7 +662,7 @@ static int davinci_i2c_probe(struct platform_device *pdev)
662#endif 662#endif
663 dev->dev = &pdev->dev; 663 dev->dev = &pdev->dev;
664 dev->irq = irq->start; 664 dev->irq = irq->start;
665 dev->pdata = dev_get_platdata(&dev->dev); 665 dev->pdata = dev_get_platdata(&pdev->dev);
666 platform_set_drvdata(pdev, dev); 666 platform_set_drvdata(pdev, dev);
667 667
668 if (!dev->pdata && pdev->dev.of_node) { 668 if (!dev->pdata && pdev->dev.of_node) {