Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
* 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: arm/imx: fix imx6q mmc error when mounting rootfs arm/imx: fix AUTO_ZRELADDR selection arm/imx: fix the references to ARCH_MX3 ARM: mx51/53: set pwm clock parent to ipg_perclk arm/tegra: enable headphone detection gpio on seaboard arm/dt: Fix ventana SDHCI power-gpios arm/tegra: Don't create duplicate gpio and pinmux devices ARM: at91: Fix USBA gadget registration atmel/spi: fix missing probe at91/yl-9200: Fix section mismatch at91: vmalloc fix missing AT91_VIRT_BASE define ARM: at91: usart: drop static map regs for dbgu ARM: picoxcell: add extra temp register to addruart ARM: msm: fix compilation flags for MSM_SCM arm/mxs: fix mmc device adding for mach-mx28evk ARM: mxc: Remove test_for_ltirq ARM:i.MX: fix build error in clock-mx51-mx53.c ARM:i.MX: fix build error in tzic/avic.c ARM: mxc: fix local timer interrupt handling msm: boards: Fix fallout from removal of machine_desc in fixup
This commit is contained in:
commit
5b34b08996
|
@ -22,11 +22,10 @@
|
||||||
sdhci@c8000400 {
|
sdhci@c8000400 {
|
||||||
cd-gpios = <&gpio 69 0>; /* gpio PI5 */
|
cd-gpios = <&gpio 69 0>; /* gpio PI5 */
|
||||||
wp-gpios = <&gpio 57 0>; /* gpio PH1 */
|
wp-gpios = <&gpio 57 0>; /* gpio PH1 */
|
||||||
power-gpios = <&gpio 155 0>; /* gpio PT3 */
|
power-gpios = <&gpio 70 0>; /* gpio PI6 */
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhci@c8000600 {
|
sdhci@c8000600 {
|
||||||
power-gpios = <&gpio 70 0>; /* gpio PI6 */
|
|
||||||
support-8bit;
|
support-8bit;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -98,7 +98,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) {}
|
||||||
* USB HS Device (Gadget)
|
* USB HS Device (Gadget)
|
||||||
* -------------------------------------------------------------------- */
|
* -------------------------------------------------------------------- */
|
||||||
|
|
||||||
#if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE)
|
#if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE)
|
||||||
|
|
||||||
static struct resource usba_udc_resources[] = {
|
static struct resource usba_udc_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
|
@ -1021,8 +1021,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
|
||||||
#if defined(CONFIG_SERIAL_ATMEL)
|
#if defined(CONFIG_SERIAL_ATMEL)
|
||||||
static struct resource dbgu_resources[] = {
|
static struct resource dbgu_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91_VA_BASE_SYS + AT91_DBGU,
|
.start = AT91_BASE_SYS + AT91_DBGU,
|
||||||
.end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
.end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
|
@ -1035,7 +1035,6 @@ static struct resource dbgu_resources[] = {
|
||||||
static struct atmel_uart_data dbgu_data = {
|
static struct atmel_uart_data dbgu_data = {
|
||||||
.use_dma_tx = 0,
|
.use_dma_tx = 0,
|
||||||
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
||||||
.regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
||||||
|
|
|
@ -877,8 +877,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
|
||||||
#if defined(CONFIG_SERIAL_ATMEL)
|
#if defined(CONFIG_SERIAL_ATMEL)
|
||||||
static struct resource dbgu_resources[] = {
|
static struct resource dbgu_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91_VA_BASE_SYS + AT91_DBGU,
|
.start = AT91_BASE_SYS + AT91_DBGU,
|
||||||
.end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
.end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
|
@ -891,7 +891,6 @@ static struct resource dbgu_resources[] = {
|
||||||
static struct atmel_uart_data dbgu_data = {
|
static struct atmel_uart_data dbgu_data = {
|
||||||
.use_dma_tx = 0,
|
.use_dma_tx = 0,
|
||||||
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
||||||
.regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
||||||
|
|
|
@ -837,8 +837,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
|
||||||
#if defined(CONFIG_SERIAL_ATMEL)
|
#if defined(CONFIG_SERIAL_ATMEL)
|
||||||
static struct resource dbgu_resources[] = {
|
static struct resource dbgu_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91_VA_BASE_SYS + AT91_DBGU,
|
.start = AT91_BASE_SYS + AT91_DBGU,
|
||||||
.end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
.end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
|
@ -851,7 +851,6 @@ static struct resource dbgu_resources[] = {
|
||||||
static struct atmel_uart_data dbgu_data = {
|
static struct atmel_uart_data dbgu_data = {
|
||||||
.use_dma_tx = 0,
|
.use_dma_tx = 0,
|
||||||
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
||||||
.regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
||||||
|
|
|
@ -816,8 +816,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
|
||||||
#if defined(CONFIG_SERIAL_ATMEL)
|
#if defined(CONFIG_SERIAL_ATMEL)
|
||||||
static struct resource dbgu_resources[] = {
|
static struct resource dbgu_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91_VA_BASE_SYS + AT91_DBGU,
|
.start = AT91_BASE_SYS + AT91_DBGU,
|
||||||
.end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
.end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
|
@ -830,7 +830,6 @@ static struct resource dbgu_resources[] = {
|
||||||
static struct atmel_uart_data dbgu_data = {
|
static struct atmel_uart_data dbgu_data = {
|
||||||
.use_dma_tx = 0,
|
.use_dma_tx = 0,
|
||||||
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
||||||
.regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
||||||
|
|
|
@ -1196,8 +1196,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
|
||||||
|
|
||||||
static struct resource dbgu_resources[] = {
|
static struct resource dbgu_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91_VA_BASE_SYS + AT91_DBGU,
|
.start = AT91_BASE_SYS + AT91_DBGU,
|
||||||
.end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
.end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
|
@ -1210,7 +1210,6 @@ static struct resource dbgu_resources[] = {
|
||||||
static struct atmel_uart_data dbgu_data = {
|
static struct atmel_uart_data dbgu_data = {
|
||||||
.use_dma_tx = 0,
|
.use_dma_tx = 0,
|
||||||
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
||||||
.regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
||||||
|
|
|
@ -197,7 +197,7 @@ void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) {}
|
||||||
* USB HS Device (Gadget)
|
* USB HS Device (Gadget)
|
||||||
* -------------------------------------------------------------------- */
|
* -------------------------------------------------------------------- */
|
||||||
|
|
||||||
#if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE)
|
#if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE)
|
||||||
static struct resource usba_udc_resources[] = {
|
static struct resource usba_udc_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91SAM9G45_UDPHS_FIFO,
|
.start = AT91SAM9G45_UDPHS_FIFO,
|
||||||
|
@ -1332,8 +1332,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
|
||||||
#if defined(CONFIG_SERIAL_ATMEL)
|
#if defined(CONFIG_SERIAL_ATMEL)
|
||||||
static struct resource dbgu_resources[] = {
|
static struct resource dbgu_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91_VA_BASE_SYS + AT91_DBGU,
|
.start = AT91_BASE_SYS + AT91_DBGU,
|
||||||
.end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
.end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
|
@ -1346,7 +1346,6 @@ static struct resource dbgu_resources[] = {
|
||||||
static struct atmel_uart_data dbgu_data = {
|
static struct atmel_uart_data dbgu_data = {
|
||||||
.use_dma_tx = 0,
|
.use_dma_tx = 0,
|
||||||
.use_dma_rx = 0,
|
.use_dma_rx = 0,
|
||||||
.regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
||||||
|
|
|
@ -75,7 +75,7 @@ void __init at91_add_device_hdmac(void) {}
|
||||||
* USB HS Device (Gadget)
|
* USB HS Device (Gadget)
|
||||||
* -------------------------------------------------------------------- */
|
* -------------------------------------------------------------------- */
|
||||||
|
|
||||||
#if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE)
|
#if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE)
|
||||||
|
|
||||||
static struct resource usba_udc_resources[] = {
|
static struct resource usba_udc_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
|
@ -908,8 +908,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
|
||||||
#if defined(CONFIG_SERIAL_ATMEL)
|
#if defined(CONFIG_SERIAL_ATMEL)
|
||||||
static struct resource dbgu_resources[] = {
|
static struct resource dbgu_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91_VA_BASE_SYS + AT91_DBGU,
|
.start = AT91_BASE_SYS + AT91_DBGU,
|
||||||
.end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
.end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
|
@ -922,7 +922,6 @@ static struct resource dbgu_resources[] = {
|
||||||
static struct atmel_uart_data dbgu_data = {
|
static struct atmel_uart_data dbgu_data = {
|
||||||
.use_dma_tx = 0,
|
.use_dma_tx = 0,
|
||||||
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
||||||
.regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
||||||
|
|
|
@ -384,7 +384,7 @@ static struct spi_board_info yl9200_spi_devices[] = {
|
||||||
#include <video/s1d13xxxfb.h>
|
#include <video/s1d13xxxfb.h>
|
||||||
|
|
||||||
|
|
||||||
static void __init yl9200_init_video(void)
|
static void yl9200_init_video(void)
|
||||||
{
|
{
|
||||||
/* NWAIT Signal */
|
/* NWAIT Signal */
|
||||||
at91_set_A_periph(AT91_PIN_PC6, 0);
|
at91_set_A_periph(AT91_PIN_PC6, 0);
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
#ifndef __ASM_ARCH_VMALLOC_H
|
#ifndef __ASM_ARCH_VMALLOC_H
|
||||||
#define __ASM_ARCH_VMALLOC_H
|
#define __ASM_ARCH_VMALLOC_H
|
||||||
|
|
||||||
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
#define VMALLOC_END (AT91_VIRT_BASE & PGDIR_MASK)
|
#define VMALLOC_END (AT91_VIRT_BASE & PGDIR_MASK)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,22 +1,26 @@
|
||||||
zreladdr-$(CONFIG_ARCH_MX1) += 0x08008000
|
zreladdr-$(CONFIG_SOC_IMX1) += 0x08008000
|
||||||
params_phys-$(CONFIG_ARCH_MX1) := 0x08000100
|
params_phys-$(CONFIG_SOC_IMX1) := 0x08000100
|
||||||
initrd_phys-$(CONFIG_ARCH_MX1) := 0x08800000
|
initrd_phys-$(CONFIG_SOC_IMX1) := 0x08800000
|
||||||
|
|
||||||
zreladdr-$(CONFIG_MACH_MX21) += 0xC0008000
|
zreladdr-$(CONFIG_SOC_IMX21) += 0xC0008000
|
||||||
params_phys-$(CONFIG_MACH_MX21) := 0xC0000100
|
params_phys-$(CONFIG_SOC_IMX21) := 0xC0000100
|
||||||
initrd_phys-$(CONFIG_MACH_MX21) := 0xC0800000
|
initrd_phys-$(CONFIG_SOC_IMX21) := 0xC0800000
|
||||||
|
|
||||||
zreladdr-$(CONFIG_ARCH_MX25) += 0x80008000
|
zreladdr-$(CONFIG_SOC_IMX25) += 0x80008000
|
||||||
params_phys-$(CONFIG_ARCH_MX25) := 0x80000100
|
params_phys-$(CONFIG_SOC_IMX25) := 0x80000100
|
||||||
initrd_phys-$(CONFIG_ARCH_MX25) := 0x80800000
|
initrd_phys-$(CONFIG_SOC_IMX25) := 0x80800000
|
||||||
|
|
||||||
zreladdr-$(CONFIG_MACH_MX27) += 0xA0008000
|
zreladdr-$(CONFIG_SOC_IMX27) += 0xA0008000
|
||||||
params_phys-$(CONFIG_MACH_MX27) := 0xA0000100
|
params_phys-$(CONFIG_SOC_IMX27) := 0xA0000100
|
||||||
initrd_phys-$(CONFIG_MACH_MX27) := 0xA0800000
|
initrd_phys-$(CONFIG_SOC_IMX27) := 0xA0800000
|
||||||
|
|
||||||
zreladdr-$(CONFIG_ARCH_MX3) += 0x80008000
|
zreladdr-$(CONFIG_SOC_IMX31) += 0x80008000
|
||||||
params_phys-$(CONFIG_ARCH_MX3) := 0x80000100
|
params_phys-$(CONFIG_SOC_IMX31) := 0x80000100
|
||||||
initrd_phys-$(CONFIG_ARCH_MX3) := 0x80800000
|
initrd_phys-$(CONFIG_SOC_IMX31) := 0x80800000
|
||||||
|
|
||||||
|
zreladdr-$(CONFIG_SOC_IMX35) += 0x80008000
|
||||||
|
params_phys-$(CONFIG_SOC_IMX35) := 0x80000100
|
||||||
|
initrd_phys-$(CONFIG_SOC_IMX35) := 0x80800000
|
||||||
|
|
||||||
zreladdr-$(CONFIG_SOC_IMX6Q) += 0x10008000
|
zreladdr-$(CONFIG_SOC_IMX6Q) += 0x10008000
|
||||||
params_phys-$(CONFIG_SOC_IMX6Q) := 0x10000100
|
params_phys-$(CONFIG_SOC_IMX6Q) := 0x10000100
|
||||||
|
|
|
@ -1139,7 +1139,7 @@ static int _clk_set_rate(struct clk *clk, unsigned long rate)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
max_div = ((d->bm_pred >> d->bp_pred) + 1) *
|
max_div = ((d->bm_pred >> d->bp_pred) + 1) *
|
||||||
((d->bm_pred >> d->bp_pred) + 1);
|
((d->bm_podf >> d->bp_podf) + 1);
|
||||||
|
|
||||||
div = parent_rate / rate;
|
div = parent_rate / rate;
|
||||||
if (div == 0)
|
if (div == 0)
|
||||||
|
@ -2002,6 +2002,21 @@ int __init mx6q_clocks_init(void)
|
||||||
clk_set_rate(&asrc_serial_clk, 1500000);
|
clk_set_rate(&asrc_serial_clk, 1500000);
|
||||||
clk_set_rate(&enfc_clk, 11000000);
|
clk_set_rate(&enfc_clk, 11000000);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Before pinctrl API is available, we have to rely on the pad
|
||||||
|
* configuration set up by bootloader. For usdhc example here,
|
||||||
|
* u-boot sets up the pads for 49.5 MHz case, and we have to lower
|
||||||
|
* the usdhc clock from 198 to 49.5 MHz to match the pad configuration.
|
||||||
|
*
|
||||||
|
* FIXME: This is should be removed after pinctrl API is available.
|
||||||
|
* At that time, usdhc driver can call pinctrl API to change pad
|
||||||
|
* configuration dynamically per different usdhc clock settings.
|
||||||
|
*/
|
||||||
|
clk_set_rate(&usdhc1_clk, 49500000);
|
||||||
|
clk_set_rate(&usdhc2_clk, 49500000);
|
||||||
|
clk_set_rate(&usdhc3_clk, 49500000);
|
||||||
|
clk_set_rate(&usdhc4_clk, 49500000);
|
||||||
|
|
||||||
np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt");
|
np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt");
|
||||||
base = of_iomap(np, 0);
|
base = of_iomap(np, 0);
|
||||||
WARN_ON(!base);
|
WARN_ON(!base);
|
||||||
|
|
|
@ -15,6 +15,8 @@ obj-$(CONFIG_MSM_SMD) += smd.o smd_debug.o
|
||||||
obj-$(CONFIG_MSM_SMD) += last_radio_log.o
|
obj-$(CONFIG_MSM_SMD) += last_radio_log.o
|
||||||
obj-$(CONFIG_MSM_SCM) += scm.o scm-boot.o
|
obj-$(CONFIG_MSM_SCM) += scm.o scm-boot.o
|
||||||
|
|
||||||
|
CFLAGS_scm.o :=$(call as-instr,.arch_extension sec,-DREQUIRES_SEC=1)
|
||||||
|
|
||||||
obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
|
obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
|
||||||
obj-$(CONFIG_SMP) += headsmp.o platsmp.o
|
obj-$(CONFIG_SMP) += headsmp.o platsmp.o
|
||||||
|
|
||||||
|
|
|
@ -42,8 +42,8 @@
|
||||||
|
|
||||||
extern struct sys_timer msm_timer;
|
extern struct sys_timer msm_timer;
|
||||||
|
|
||||||
static void __init msm7x30_fixup(struct machine_desc *desc, struct tag *tag,
|
static void __init msm7x30_fixup(struct tag *tag, char **cmdline,
|
||||||
char **cmdline, struct meminfo *mi)
|
struct meminfo *mi)
|
||||||
{
|
{
|
||||||
for (; tag->hdr.size; tag = tag_next(tag))
|
for (; tag->hdr.size; tag = tag_next(tag))
|
||||||
if (tag->hdr.tag == ATAG_MEM && tag->u.mem.start == 0x200000) {
|
if (tag->hdr.tag == ATAG_MEM && tag->u.mem.start == 0x200000) {
|
||||||
|
|
|
@ -32,8 +32,8 @@
|
||||||
|
|
||||||
#include "devices.h"
|
#include "devices.h"
|
||||||
|
|
||||||
static void __init msm8960_fixup(struct machine_desc *desc, struct tag *tag,
|
static void __init msm8960_fixup(struct tag *tag, char **cmdline,
|
||||||
char **cmdline, struct meminfo *mi)
|
struct meminfo *mi)
|
||||||
{
|
{
|
||||||
for (; tag->hdr.size; tag = tag_next(tag))
|
for (; tag->hdr.size; tag = tag_next(tag))
|
||||||
if (tag->hdr.tag == ATAG_MEM &&
|
if (tag->hdr.tag == ATAG_MEM &&
|
||||||
|
|
|
@ -28,8 +28,8 @@
|
||||||
#include <mach/board.h>
|
#include <mach/board.h>
|
||||||
#include <mach/msm_iomap.h>
|
#include <mach/msm_iomap.h>
|
||||||
|
|
||||||
static void __init msm8x60_fixup(struct machine_desc *desc, struct tag *tag,
|
static void __init msm8x60_fixup(struct tag *tag, char **cmdline,
|
||||||
char **cmdline, struct meminfo *mi)
|
struct meminfo *mi)
|
||||||
{
|
{
|
||||||
for (; tag->hdr.size; tag = tag_next(tag))
|
for (; tag->hdr.size; tag = tag_next(tag))
|
||||||
if (tag->hdr.tag == ATAG_MEM &&
|
if (tag->hdr.tag == ATAG_MEM &&
|
||||||
|
|
|
@ -180,6 +180,9 @@ static u32 smc(u32 cmd_addr)
|
||||||
__asmeq("%1", "r0")
|
__asmeq("%1", "r0")
|
||||||
__asmeq("%2", "r1")
|
__asmeq("%2", "r1")
|
||||||
__asmeq("%3", "r2")
|
__asmeq("%3", "r2")
|
||||||
|
#ifdef REQUIRES_SEC
|
||||||
|
".arch_extension sec\n"
|
||||||
|
#endif
|
||||||
"smc #0 @ switch to secure world\n"
|
"smc #0 @ switch to secure world\n"
|
||||||
: "=r" (r0)
|
: "=r" (r0)
|
||||||
: "r" (r0), "r" (r1), "r" (r2)
|
: "r" (r0), "r" (r1), "r" (r2)
|
||||||
|
|
|
@ -1281,9 +1281,9 @@ DEFINE_CLOCK(gpt_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG9_OFFSET,
|
||||||
NULL, NULL, &ipg_clk, &gpt_ipg_clk);
|
NULL, NULL, &ipg_clk, &gpt_ipg_clk);
|
||||||
|
|
||||||
DEFINE_CLOCK(pwm1_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG6_OFFSET,
|
DEFINE_CLOCK(pwm1_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG6_OFFSET,
|
||||||
NULL, NULL, &ipg_clk, NULL);
|
NULL, NULL, &ipg_perclk, NULL);
|
||||||
DEFINE_CLOCK(pwm2_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG8_OFFSET,
|
DEFINE_CLOCK(pwm2_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG8_OFFSET,
|
||||||
NULL, NULL, &ipg_clk, NULL);
|
NULL, NULL, &ipg_perclk, NULL);
|
||||||
|
|
||||||
/* I2C */
|
/* I2C */
|
||||||
DEFINE_CLOCK(i2c1_clk, 0, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG9_OFFSET,
|
DEFINE_CLOCK(i2c1_clk, 0, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG9_OFFSET,
|
||||||
|
@ -1634,6 +1634,7 @@ int __init mx53_clocks_init(unsigned long ckil, unsigned long osc,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_OF
|
||||||
static void __init clk_get_freq_dt(unsigned long *ckil, unsigned long *osc,
|
static void __init clk_get_freq_dt(unsigned long *ckil, unsigned long *osc,
|
||||||
unsigned long *ckih1, unsigned long *ckih2)
|
unsigned long *ckih1, unsigned long *ckih2)
|
||||||
{
|
{
|
||||||
|
@ -1671,3 +1672,4 @@ int __init mx53_clocks_init_dt(void)
|
||||||
clk_get_freq_dt(&ckil, &osc, &ckih1, &ckih2);
|
clk_get_freq_dt(&ckil, &osc, &ckih1, &ckih2);
|
||||||
return mx53_clocks_init(ckil, osc, ckih1, ckih2);
|
return mx53_clocks_init(ckil, osc, ckih1, ckih2);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -471,7 +471,8 @@ static void __init mx28evk_init(void)
|
||||||
"mmc0-slot-power");
|
"mmc0-slot-power");
|
||||||
if (ret)
|
if (ret)
|
||||||
pr_warn("failed to request gpio mmc0-slot-power: %d\n", ret);
|
pr_warn("failed to request gpio mmc0-slot-power: %d\n", ret);
|
||||||
mx28_add_mxs_mmc(0, &mx28evk_mmc_pdata[0]);
|
else
|
||||||
|
mx28_add_mxs_mmc(0, &mx28evk_mmc_pdata[0]);
|
||||||
|
|
||||||
ret = gpio_request_one(MX28EVK_MMC1_SLOT_POWER, GPIOF_OUT_INIT_LOW,
|
ret = gpio_request_one(MX28EVK_MMC1_SLOT_POWER, GPIOF_OUT_INIT_LOW,
|
||||||
"mmc1-slot-power");
|
"mmc1-slot-power");
|
||||||
|
@ -480,7 +481,6 @@ static void __init mx28evk_init(void)
|
||||||
else
|
else
|
||||||
mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]);
|
mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]);
|
||||||
|
|
||||||
mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]);
|
|
||||||
mx28_add_rtc_stmp3xxx();
|
mx28_add_rtc_stmp3xxx();
|
||||||
|
|
||||||
gpio_led_register_device(0, &mx28evk_led_data);
|
gpio_led_register_device(0, &mx28evk_led_data);
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
#define UART_SHIFT 2
|
#define UART_SHIFT 2
|
||||||
|
|
||||||
.macro addruart, rp, rv
|
.macro addruart, rp, rv, tmp
|
||||||
ldr \rv, =PHYS_TO_IO(PICOXCELL_UART1_BASE)
|
ldr \rv, =PHYS_TO_IO(PICOXCELL_UART1_BASE)
|
||||||
ldr \rp, =PICOXCELL_UART1_BASE
|
ldr \rp, =PICOXCELL_UART1_BASE
|
||||||
.endm
|
.endm
|
||||||
|
|
|
@ -101,6 +101,13 @@ static void __init tegra_dt_init(void)
|
||||||
|
|
||||||
tegra_clk_init_from_table(tegra_dt_clk_init_table);
|
tegra_clk_init_from_table(tegra_dt_clk_init_table);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Finished with the static registrations now; fill in the missing
|
||||||
|
* devices
|
||||||
|
*/
|
||||||
|
of_platform_populate(NULL, tegra_dt_match_table,
|
||||||
|
tegra20_auxdata_lookup, NULL);
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(pinmux_configs); i++) {
|
for (i = 0; i < ARRAY_SIZE(pinmux_configs); i++) {
|
||||||
if (of_machine_is_compatible(pinmux_configs[i].machine)) {
|
if (of_machine_is_compatible(pinmux_configs[i].machine)) {
|
||||||
pinmux_configs[i].init();
|
pinmux_configs[i].init();
|
||||||
|
@ -110,12 +117,6 @@ static void __init tegra_dt_init(void)
|
||||||
|
|
||||||
WARN(i == ARRAY_SIZE(pinmux_configs),
|
WARN(i == ARRAY_SIZE(pinmux_configs),
|
||||||
"Unknown platform! Pinmuxing not initialized\n");
|
"Unknown platform! Pinmuxing not initialized\n");
|
||||||
|
|
||||||
/*
|
|
||||||
* Finished with the static registrations now; fill in the missing
|
|
||||||
* devices
|
|
||||||
*/
|
|
||||||
of_platform_populate(NULL, tegra_dt_match_table, tegra20_auxdata_lookup, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char * tegra_dt_board_compat[] = {
|
static const char * tegra_dt_board_compat[] = {
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/of.h>
|
||||||
|
|
||||||
#include <mach/pinmux.h>
|
#include <mach/pinmux.h>
|
||||||
|
|
||||||
#include "gpio-names.h"
|
#include "gpio-names.h"
|
||||||
|
@ -161,7 +163,9 @@ static struct tegra_gpio_table gpio_table[] = {
|
||||||
|
|
||||||
void harmony_pinmux_init(void)
|
void harmony_pinmux_init(void)
|
||||||
{
|
{
|
||||||
platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices));
|
if (!of_machine_is_compatible("nvidia,tegra20"))
|
||||||
|
platform_add_devices(pinmux_devices,
|
||||||
|
ARRAY_SIZE(pinmux_devices));
|
||||||
|
|
||||||
tegra_pinmux_config_table(harmony_pinmux, ARRAY_SIZE(harmony_pinmux));
|
tegra_pinmux_config_table(harmony_pinmux, ARRAY_SIZE(harmony_pinmux));
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/of.h>
|
||||||
|
|
||||||
#include <mach/pinmux.h>
|
#include <mach/pinmux.h>
|
||||||
|
|
||||||
#include "gpio-names.h"
|
#include "gpio-names.h"
|
||||||
|
@ -158,7 +160,9 @@ static struct tegra_gpio_table gpio_table[] = {
|
||||||
|
|
||||||
void paz00_pinmux_init(void)
|
void paz00_pinmux_init(void)
|
||||||
{
|
{
|
||||||
platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices));
|
if (!of_machine_is_compatible("nvidia,tegra20"))
|
||||||
|
platform_add_devices(pinmux_devices,
|
||||||
|
ARRAY_SIZE(pinmux_devices));
|
||||||
|
|
||||||
tegra_pinmux_config_table(paz00_pinmux, ARRAY_SIZE(paz00_pinmux));
|
tegra_pinmux_config_table(paz00_pinmux, ARRAY_SIZE(paz00_pinmux));
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/of.h>
|
||||||
|
|
||||||
#include <mach/pinmux.h>
|
#include <mach/pinmux.h>
|
||||||
#include <mach/pinmux-t2.h>
|
#include <mach/pinmux-t2.h>
|
||||||
|
@ -191,6 +192,7 @@ static struct tegra_gpio_table common_gpio_table[] = {
|
||||||
{ .gpio = TEGRA_GPIO_SD2_POWER, .enable = true },
|
{ .gpio = TEGRA_GPIO_SD2_POWER, .enable = true },
|
||||||
{ .gpio = TEGRA_GPIO_LIDSWITCH, .enable = true },
|
{ .gpio = TEGRA_GPIO_LIDSWITCH, .enable = true },
|
||||||
{ .gpio = TEGRA_GPIO_POWERKEY, .enable = true },
|
{ .gpio = TEGRA_GPIO_POWERKEY, .enable = true },
|
||||||
|
{ .gpio = TEGRA_GPIO_HP_DET, .enable = true },
|
||||||
{ .gpio = TEGRA_GPIO_ISL29018_IRQ, .enable = true },
|
{ .gpio = TEGRA_GPIO_ISL29018_IRQ, .enable = true },
|
||||||
{ .gpio = TEGRA_GPIO_CDC_IRQ, .enable = true },
|
{ .gpio = TEGRA_GPIO_CDC_IRQ, .enable = true },
|
||||||
{ .gpio = TEGRA_GPIO_USB1, .enable = true },
|
{ .gpio = TEGRA_GPIO_USB1, .enable = true },
|
||||||
|
@ -218,7 +220,9 @@ static void __init update_pinmux(struct tegra_pingroup_config *newtbl, int size)
|
||||||
|
|
||||||
void __init seaboard_common_pinmux_init(void)
|
void __init seaboard_common_pinmux_init(void)
|
||||||
{
|
{
|
||||||
platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices));
|
if (!of_machine_is_compatible("nvidia,tegra20"))
|
||||||
|
platform_add_devices(pinmux_devices,
|
||||||
|
ARRAY_SIZE(pinmux_devices));
|
||||||
|
|
||||||
tegra_pinmux_config_table(seaboard_pinmux, ARRAY_SIZE(seaboard_pinmux));
|
tegra_pinmux_config_table(seaboard_pinmux, ARRAY_SIZE(seaboard_pinmux));
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <linux/of.h>
|
||||||
|
|
||||||
#include <mach/pinmux.h>
|
#include <mach/pinmux.h>
|
||||||
|
|
||||||
|
@ -157,7 +158,9 @@ static struct tegra_gpio_table gpio_table[] = {
|
||||||
|
|
||||||
void __init trimslice_pinmux_init(void)
|
void __init trimslice_pinmux_init(void)
|
||||||
{
|
{
|
||||||
platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices));
|
if (!of_machine_is_compatible("nvidia,tegra20"))
|
||||||
|
platform_add_devices(pinmux_devices,
|
||||||
|
ARRAY_SIZE(pinmux_devices));
|
||||||
tegra_pinmux_config_table(trimslice_pinmux, ARRAY_SIZE(trimslice_pinmux));
|
tegra_pinmux_config_table(trimslice_pinmux, ARRAY_SIZE(trimslice_pinmux));
|
||||||
tegra_gpio_config(gpio_table, ARRAY_SIZE(gpio_table));
|
tegra_gpio_config(gpio_table, ARRAY_SIZE(gpio_table));
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ choice
|
||||||
|
|
||||||
config ARCH_IMX_V4_V5
|
config ARCH_IMX_V4_V5
|
||||||
bool "i.MX1, i.MX21, i.MX25, i.MX27"
|
bool "i.MX1, i.MX21, i.MX25, i.MX27"
|
||||||
select AUTO_ZRELADDR
|
select AUTO_ZRELADDR if !ZBOOT_ROM
|
||||||
select ARM_PATCH_PHYS_VIRT
|
select ARM_PATCH_PHYS_VIRT
|
||||||
help
|
help
|
||||||
This enables support for systems based on the Freescale i.MX ARMv4
|
This enables support for systems based on the Freescale i.MX ARMv4
|
||||||
|
@ -26,7 +26,7 @@ config ARCH_IMX_V6_V7
|
||||||
|
|
||||||
config ARCH_MX5
|
config ARCH_MX5
|
||||||
bool "i.MX50, i.MX51, i.MX53"
|
bool "i.MX50, i.MX51, i.MX53"
|
||||||
select AUTO_ZRELADDR
|
select AUTO_ZRELADDR if !ZBOOT_ROM
|
||||||
select ARM_PATCH_PHYS_VIRT
|
select ARM_PATCH_PHYS_VIRT
|
||||||
help
|
help
|
||||||
This enables support for machines using Freescale's i.MX50 and i.MX53
|
This enables support for machines using Freescale's i.MX50 and i.MX53
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
#include <asm/mach/irq.h>
|
#include <asm/mach/irq.h>
|
||||||
|
#include <asm/exception.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
#include "irq-common.h"
|
#include "irq-common.h"
|
||||||
|
|
|
@ -28,21 +28,14 @@ asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)
|
||||||
if (irqnr == 1023)
|
if (irqnr == 1023)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (irqnr > 29 && irqnr < 1021)
|
if (irqnr > 15 && irqnr < 1021)
|
||||||
handle_IRQ(irqnr, regs);
|
handle_IRQ(irqnr, regs);
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
else if (irqnr < 16) {
|
else {
|
||||||
writel_relaxed(irqstat, gic_cpu_base_addr +
|
writel_relaxed(irqstat, gic_cpu_base_addr +
|
||||||
GIC_CPU_EOI);
|
GIC_CPU_EOI);
|
||||||
handle_IPI(irqnr, regs);
|
handle_IPI(irqnr, regs);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_LOCAL_TIMERS
|
|
||||||
else if (irqnr == 29) {
|
|
||||||
writel_relaxed(irqstat, gic_cpu_base_addr +
|
|
||||||
GIC_CPU_EOI);
|
|
||||||
handle_local_timer(regs);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
} while (1);
|
} while (1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,3 @@
|
||||||
|
|
||||||
.macro test_for_ipi, irqnr, irqstat, base, tmp
|
.macro test_for_ipi, irqnr, irqstat, base, tmp
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro test_for_ltirq, irqnr, irqstat, base, tmp
|
|
||||||
.endm
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <asm/mach/irq.h>
|
#include <asm/mach/irq.h>
|
||||||
|
#include <asm/exception.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
/* VENDOR SPEC register */
|
/* VENDOR SPEC register */
|
||||||
#define SDHCI_VENDOR_SPEC 0xC0
|
#define SDHCI_VENDOR_SPEC 0xC0
|
||||||
#define SDHCI_VENDOR_SPEC_SDIO_QUIRK 0x00000002
|
#define SDHCI_VENDOR_SPEC_SDIO_QUIRK 0x00000002
|
||||||
|
#define SDHCI_WTMK_LVL 0x44
|
||||||
#define SDHCI_MIX_CTRL 0x48
|
#define SDHCI_MIX_CTRL 0x48
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -476,6 +477,13 @@ static int __devinit sdhci_esdhc_imx_probe(struct platform_device *pdev)
|
||||||
if (is_imx53_esdhc(imx_data))
|
if (is_imx53_esdhc(imx_data))
|
||||||
imx_data->flags |= ESDHC_FLAG_MULTIBLK_NO_INT;
|
imx_data->flags |= ESDHC_FLAG_MULTIBLK_NO_INT;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The imx6q ROM code will change the default watermark level setting
|
||||||
|
* to something insane. Change it back here.
|
||||||
|
*/
|
||||||
|
if (is_imx6q_usdhc(imx_data))
|
||||||
|
writel(0x08100810, host->ioaddr + SDHCI_WTMK_LVL);
|
||||||
|
|
||||||
boarddata = &imx_data->boarddata;
|
boarddata = &imx_data->boarddata;
|
||||||
if (sdhci_esdhc_imx_probe_dt(pdev, boarddata) < 0) {
|
if (sdhci_esdhc_imx_probe_dt(pdev, boarddata) < 0) {
|
||||||
if (!host->mmc->parent->platform_data) {
|
if (!host->mmc->parent->platform_data) {
|
||||||
|
|
|
@ -907,7 +907,7 @@ static void atmel_spi_cleanup(struct spi_device *spi)
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static int __init atmel_spi_probe(struct platform_device *pdev)
|
static int __devinit atmel_spi_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct resource *regs;
|
struct resource *regs;
|
||||||
int irq;
|
int irq;
|
||||||
|
@ -1003,7 +1003,7 @@ out_free:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit atmel_spi_remove(struct platform_device *pdev)
|
static int __devexit atmel_spi_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct spi_master *master = platform_get_drvdata(pdev);
|
struct spi_master *master = platform_get_drvdata(pdev);
|
||||||
struct atmel_spi *as = spi_master_get_devdata(master);
|
struct atmel_spi *as = spi_master_get_devdata(master);
|
||||||
|
@ -1072,6 +1072,7 @@ static struct platform_driver atmel_spi_driver = {
|
||||||
},
|
},
|
||||||
.suspend = atmel_spi_suspend,
|
.suspend = atmel_spi_suspend,
|
||||||
.resume = atmel_spi_resume,
|
.resume = atmel_spi_resume,
|
||||||
|
.probe = atmel_spi_probe,
|
||||||
.remove = __exit_p(atmel_spi_remove),
|
.remove = __exit_p(atmel_spi_remove),
|
||||||
};
|
};
|
||||||
module_platform_driver(atmel_spi_driver);
|
module_platform_driver(atmel_spi_driver);
|
||||||
|
|
Loading…
Reference in a new issue