ARM: arm-soc board updates, take 2
This branch contains board updates, mostly for shmobile, but also a couple for PXA. The shmobile platforms are still in the early stages of DT enablement, so there's a bit more updates here than we'd ideally want to see: - regulator updates to provide some fixed regulators on several boards - gpio support updates for multiple boards - misc updates for recently-introduced boards armadillo800eva and kzm9g - defconfig updates -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJQFcP7AAoJEIwa5zzehBx3gY0P/jg2pF1uznUV/4JVDKEJ7RPk v6XfN8JZCiDDfd2dHwnw2sTkMxFUA1yzrb3nYMu4w4t4Bb0bL9q06Ak5nqEmqi8Q ASNua/h54qRbj9OLRPkqN2mCIZkeXJgO+aj4jh7ERXWn3sawPIBsyI+Z06Lk8OoO uI4gJQwB+gdXn/Ewr7xCG2hwcHzQNkPibw+7NkhP6iRk+0S8C01G0YbWeIcRhUIo W2bFQRkpWtvMgYO2f/4W97jQAxD9d76ImBKXo1McA+U51U7J4y3/zzQ5diCv+GhX 647Ja8q/+T2KY4Rpanmq++yzTaYWA67le0JN3btGdfpCcP+R1zWzpuY5zpHQ+kbM ptqndFSJ1eJrUagrYCyYRPDbwsGjDrf4B5eJxnYcQ9RBG3mo7ujnmcb7qDpA11IE ZIGBodR/9HDkqM7Hv3CZG4WLgzDanCA2lZz75oc1LIJIwyWy8GzYHj9IfdyA5Mxw NvUjr26nu6REk45LsDjKIkL1KMulrT3MRhFHvZtKkSIBPqMMZHxJtxnW3XpLBL6i dHmwKkK+TkwCCTD8dSMFTxxOf2O9Rv9b2KSQumphplC83gCl9GZB2q7t7zKPpwXa lvqB1qfCLM5azQ7tVgksUOCI1Nmpz4bYa3XvXW1Zyraryaw8530Hex5TwfQb6Xun WEQp09zQYi80SWTrlGmW =7Fgi -----END PGP SIGNATURE----- Merge tag 'boards2' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc Pull arm-soc board updates from Olof Johansson: "This branch contains board updates, mostly for shmobile, but also a couple for PXA. The shmobile platforms are still in the early stages of DT enablement, so there's a bit more updates here than we'd ideally want to see: - regulator updates to provide some fixed regulators on several boards - gpio support updates for multiple boards - misc updates for recently-introduced boards armadillo800eva and kzm9g - defconfig updates" * tag 'boards2' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (37 commits) ARM: shmobile: kzm9g: defconfig enable INOTIFY_USER ARM: mach-shmobile: armadillo800eva: defconfig Allow use of armhf userspace ARM: shmobile: armadillo800eva: A3SP domain includes USB ARM: shmobile: armadillo800eva: A4LC domain includes LCDC ARM: shmobile: armadillo800eva: USB Func enables external IRQ mode ARM: mach-shmobile: kzm9d: Add defconfig ARM: mach-shmobile: select the fixed regulator driver on several boards ARM: mach-shmobile: add SDHI2 to the 2.8V fixed regulator consumers on kzm9g ARM: pxa: hx4700: Use DEFINE_RES_* macros consistently ARM: pxa: remove eseries.h ARM: mach-shmobile: add fixed voltage regulators to marzen ARM: mach-shmobile: add fixed voltage regulators to kzm9g ARM: mach-shmobile: add fixed voltage regulators to kzm9d ARM: mach-shmobile: add fixed voltage regulators to kota2 ARM: mach-shmobile: add fixed voltage regulators to g4evm ARM: mach-shmobile: add fixed voltage regulators to bonito ARM: mach-shmobile: add fixed voltage regulators to armadillo800eva ARM: mach-shmobile: add fixed voltage regulators to ap4evb ARM: mach-shmobile: add fixed voltage regulators to ag5evm ARM: mach-shmobile: add 3.3V and 1.8V fixed regulators to mackerel ...
This commit is contained in:
commit
f50f118c49
|
@ -5,10 +5,7 @@ CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_LOG_BUF_SHIFT=16
|
CONFIG_LOG_BUF_SHIFT=16
|
||||||
# CONFIG_UTS_NS is not set
|
# CONFIG_UTS_NS is not set
|
||||||
# CONFIG_IPC_NS is not set
|
# CONFIG_IPC_NS is not set
|
||||||
# CONFIG_USER_NS is not set
|
|
||||||
# CONFIG_PID_NS is not set
|
# CONFIG_PID_NS is not set
|
||||||
CONFIG_SYSFS_DEPRECATED=y
|
|
||||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
|
||||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||||
CONFIG_SLAB=y
|
CONFIG_SLAB=y
|
||||||
CONFIG_MODULES=y
|
CONFIG_MODULES=y
|
||||||
|
@ -21,7 +18,7 @@ CONFIG_ARCH_SHMOBILE=y
|
||||||
CONFIG_ARCH_R8A7740=y
|
CONFIG_ARCH_R8A7740=y
|
||||||
CONFIG_MACH_ARMADILLO800EVA=y
|
CONFIG_MACH_ARMADILLO800EVA=y
|
||||||
# CONFIG_SH_TIMER_TMU is not set
|
# CONFIG_SH_TIMER_TMU is not set
|
||||||
# CONFIG_ARM_THUMB is not set
|
CONFIG_ARM_THUMB=y
|
||||||
CONFIG_CPU_BPREDICT_DISABLE=y
|
CONFIG_CPU_BPREDICT_DISABLE=y
|
||||||
# CONFIG_CACHE_L2X0 is not set
|
# CONFIG_CACHE_L2X0 is not set
|
||||||
CONFIG_ARM_ERRATA_430973=y
|
CONFIG_ARM_ERRATA_430973=y
|
||||||
|
@ -39,6 +36,7 @@ CONFIG_ZBOOT_ROM_BSS=0x0
|
||||||
CONFIG_CMDLINE="console=tty0 console=ttySC1,115200 earlyprintk=sh-sci.1,115200 ignore_loglevel root=/dev/nfs ip=dhcp nfsroot=,rsize=4096,wsize=4096"
|
CONFIG_CMDLINE="console=tty0 console=ttySC1,115200 earlyprintk=sh-sci.1,115200 ignore_loglevel root=/dev/nfs ip=dhcp nfsroot=,rsize=4096,wsize=4096"
|
||||||
CONFIG_CMDLINE_FORCE=y
|
CONFIG_CMDLINE_FORCE=y
|
||||||
CONFIG_KEXEC=y
|
CONFIG_KEXEC=y
|
||||||
|
CONFIG_VFP=y
|
||||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||||
# CONFIG_SUSPEND is not set
|
# CONFIG_SUSPEND is not set
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
|
@ -89,26 +87,32 @@ CONFIG_SERIAL_SH_SCI_CONSOLE=y
|
||||||
CONFIG_I2C=y
|
CONFIG_I2C=y
|
||||||
CONFIG_I2C_SH_MOBILE=y
|
CONFIG_I2C_SH_MOBILE=y
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
|
CONFIG_MEDIA_SUPPORT=y
|
||||||
|
CONFIG_VIDEO_DEV=y
|
||||||
|
# CONFIG_RC_CORE is not set
|
||||||
|
# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
|
||||||
|
# CONFIG_V4L_USB_DRIVERS is not set
|
||||||
|
CONFIG_V4L_PLATFORM_DRIVERS=y
|
||||||
|
CONFIG_SOC_CAMERA=y
|
||||||
|
CONFIG_SOC_CAMERA_MT9T112=y
|
||||||
|
CONFIG_VIDEO_SH_MOBILE_CEU=y
|
||||||
|
# CONFIG_RADIO_ADAPTERS is not set
|
||||||
CONFIG_FB=y
|
CONFIG_FB=y
|
||||||
CONFIG_FB_MODE_HELPERS=y
|
|
||||||
CONFIG_FB_SH_MOBILE_LCDC=y
|
CONFIG_FB_SH_MOBILE_LCDC=y
|
||||||
|
CONFIG_FB_SH_MOBILE_HDMI=y
|
||||||
CONFIG_LCD_CLASS_DEVICE=y
|
CONFIG_LCD_CLASS_DEVICE=y
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
# CONFIG_LOGO_LINUX_MONO is not set
|
# CONFIG_LOGO_LINUX_MONO is not set
|
||||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||||
CONFIG_SOUND=y
|
|
||||||
CONFIG_SND=y
|
|
||||||
# CONFIG_SND_SUPPORT_OLD_API is not set
|
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||||
# CONFIG_SND_VERBOSE_PROCFS is not set
|
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||||
# CONFIG_SND_DRIVERS is not set
|
# CONFIG_SND_DRIVERS is not set
|
||||||
# CONFIG_SND_ARM is not set
|
# CONFIG_SND_ARM is not set
|
||||||
CONFIG_SND_SOC=y
|
|
||||||
CONFIG_SND_SOC_SH4_FSI=y
|
CONFIG_SND_SOC_SH4_FSI=y
|
||||||
# CONFIG_HID_SUPPORT is not set
|
# CONFIG_HID_SUPPORT is not set
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
# CONFIG_USB_DEVICE_CLASS is not set
|
|
||||||
CONFIG_USB_RENESAS_USBHS=y
|
CONFIG_USB_RENESAS_USBHS=y
|
||||||
CONFIG_USB_GADGET=y
|
CONFIG_USB_GADGET=y
|
||||||
CONFIG_USB_RENESAS_USBHS_UDC=y
|
CONFIG_USB_RENESAS_USBHS_UDC=y
|
||||||
|
@ -116,6 +120,8 @@ CONFIG_USB_ETH=m
|
||||||
CONFIG_MMC=y
|
CONFIG_MMC=y
|
||||||
CONFIG_MMC_SDHI=y
|
CONFIG_MMC_SDHI=y
|
||||||
CONFIG_MMC_SH_MMCIF=y
|
CONFIG_MMC_SH_MMCIF=y
|
||||||
|
CONFIG_DMADEVICES=y
|
||||||
|
CONFIG_SH_DMAE=y
|
||||||
CONFIG_UIO=y
|
CONFIG_UIO=y
|
||||||
CONFIG_UIO_PDRV_GENIRQ=y
|
CONFIG_UIO_PDRV_GENIRQ=y
|
||||||
# CONFIG_DNOTIFY is not set
|
# CONFIG_DNOTIFY is not set
|
||||||
|
@ -124,7 +130,6 @@ CONFIG_VFAT_FS=y
|
||||||
CONFIG_TMPFS=y
|
CONFIG_TMPFS=y
|
||||||
# CONFIG_MISC_FILESYSTEMS is not set
|
# CONFIG_MISC_FILESYSTEMS is not set
|
||||||
CONFIG_NFS_FS=y
|
CONFIG_NFS_FS=y
|
||||||
CONFIG_NFS_V3=y
|
|
||||||
CONFIG_NFS_V3_ACL=y
|
CONFIG_NFS_V3_ACL=y
|
||||||
CONFIG_NFS_V4=y
|
CONFIG_NFS_V4=y
|
||||||
CONFIG_NFS_V4_1=y
|
CONFIG_NFS_V4_1=y
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
# CONFIG_ARM_PATCH_PHYS_VIRT is not set
|
||||||
|
CONFIG_EXPERIMENTAL=y
|
||||||
|
CONFIG_SYSVIPC=y
|
||||||
|
CONFIG_NO_HZ=y
|
||||||
|
CONFIG_IKCONFIG=y
|
||||||
|
CONFIG_IKCONFIG_PROC=y
|
||||||
|
CONFIG_LOG_BUF_SHIFT=16
|
||||||
|
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||||
|
CONFIG_SYSCTL_SYSCALL=y
|
||||||
|
CONFIG_EMBEDDED=y
|
||||||
|
CONFIG_SLAB=y
|
||||||
|
# CONFIG_BLK_DEV_BSG is not set
|
||||||
|
# CONFIG_IOSCHED_DEADLINE is not set
|
||||||
|
# CONFIG_IOSCHED_CFQ is not set
|
||||||
|
CONFIG_ARCH_SHMOBILE=y
|
||||||
|
CONFIG_ARCH_EMEV2=y
|
||||||
|
CONFIG_MACH_KZM9D=y
|
||||||
|
CONFIG_MEMORY_START=0x40000000
|
||||||
|
CONFIG_MEMORY_SIZE=0x10000000
|
||||||
|
# CONFIG_SH_TIMER_TMU is not set
|
||||||
|
# CONFIG_SWP_EMULATE is not set
|
||||||
|
# CONFIG_CACHE_L2X0 is not set
|
||||||
|
CONFIG_SMP=y
|
||||||
|
CONFIG_NR_CPUS=2
|
||||||
|
CONFIG_HOTPLUG_CPU=y
|
||||||
|
# CONFIG_LOCAL_TIMERS is not set
|
||||||
|
CONFIG_AEABI=y
|
||||||
|
# CONFIG_OABI_COMPAT is not set
|
||||||
|
# CONFIG_CROSS_MEMORY_ATTACH is not set
|
||||||
|
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||||
|
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||||
|
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||||
|
CONFIG_ARM_APPENDED_DTB=y
|
||||||
|
CONFIG_CMDLINE="console=tty0 console=ttyS1,115200n81 earlyprintk=serial8250-em.1,115200n81 mem=128M@0x40000000 ignore_loglevel root=/dev/nfs ip=dhcp nfsroot=,rsize=4096,wsize=4096"
|
||||||
|
CONFIG_CMDLINE_FORCE=y
|
||||||
|
CONFIG_VFP=y
|
||||||
|
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||||
|
# CONFIG_SUSPEND is not set
|
||||||
|
CONFIG_NET=y
|
||||||
|
CONFIG_PACKET=y
|
||||||
|
CONFIG_UNIX=y
|
||||||
|
CONFIG_INET=y
|
||||||
|
CONFIG_IP_PNP=y
|
||||||
|
CONFIG_IP_PNP_DHCP=y
|
||||||
|
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||||
|
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||||
|
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||||
|
# CONFIG_INET_LRO is not set
|
||||||
|
# CONFIG_INET_DIAG is not set
|
||||||
|
# CONFIG_IPV6 is not set
|
||||||
|
# CONFIG_WIRELESS is not set
|
||||||
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
|
# CONFIG_BLK_DEV is not set
|
||||||
|
CONFIG_NETDEVICES=y
|
||||||
|
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||||
|
# CONFIG_NET_VENDOR_CHELSIO is not set
|
||||||
|
# CONFIG_NET_VENDOR_CIRRUS is not set
|
||||||
|
# CONFIG_NET_VENDOR_FARADAY is not set
|
||||||
|
# CONFIG_NET_VENDOR_INTEL is not set
|
||||||
|
# CONFIG_NET_VENDOR_MARVELL is not set
|
||||||
|
# CONFIG_NET_VENDOR_MICREL is not set
|
||||||
|
# CONFIG_NET_VENDOR_NATSEMI is not set
|
||||||
|
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||||
|
CONFIG_SMSC911X=y
|
||||||
|
# CONFIG_NET_VENDOR_STMICRO is not set
|
||||||
|
# CONFIG_NET_VENDOR_WIZNET is not set
|
||||||
|
# CONFIG_WLAN is not set
|
||||||
|
# CONFIG_INPUT_MOUSEDEV is not set
|
||||||
|
# CONFIG_INPUT_KEYBOARD is not set
|
||||||
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
|
# CONFIG_SERIO is not set
|
||||||
|
# CONFIG_LEGACY_PTYS is not set
|
||||||
|
# CONFIG_DEVKMEM is not set
|
||||||
|
CONFIG_SERIAL_8250=y
|
||||||
|
CONFIG_SERIAL_8250_CONSOLE=y
|
||||||
|
CONFIG_SERIAL_8250_EM=y
|
||||||
|
# CONFIG_HW_RANDOM is not set
|
||||||
|
CONFIG_GPIOLIB=y
|
||||||
|
CONFIG_GPIO_EM=y
|
||||||
|
# CONFIG_HWMON is not set
|
||||||
|
# CONFIG_HID_SUPPORT is not set
|
||||||
|
# CONFIG_USB_SUPPORT is not set
|
||||||
|
# CONFIG_IOMMU_SUPPORT is not set
|
||||||
|
# CONFIG_DNOTIFY is not set
|
||||||
|
CONFIG_TMPFS=y
|
||||||
|
# CONFIG_MISC_FILESYSTEMS is not set
|
||||||
|
CONFIG_NFS_FS=y
|
||||||
|
CONFIG_ROOT_NFS=y
|
||||||
|
# CONFIG_FTRACE is not set
|
|
@ -100,7 +100,12 @@ CONFIG_SND_SOC_SH4_FSI=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_DEVICEFS=y
|
CONFIG_USB_DEVICEFS=y
|
||||||
CONFIG_USB_R8A66597_HCD=y
|
CONFIG_USB_R8A66597_HCD=y
|
||||||
|
CONFIG_USB_RENESAS_USBHS=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
|
CONFIG_USB_GADGET=y
|
||||||
|
CONFIG_USB_RENESAS_USBHS_UDC=y
|
||||||
|
CONFIG_USB_ETH=m
|
||||||
|
CONFIG_USB_MASS_STORAGE=m
|
||||||
CONFIG_MMC=y
|
CONFIG_MMC=y
|
||||||
# CONFIG_MMC_BLOCK_BOUNCE is not set
|
# CONFIG_MMC_BLOCK_BOUNCE is not set
|
||||||
CONFIG_MMC_SDHI=y
|
CONFIG_MMC_SDHI=y
|
||||||
|
@ -108,12 +113,13 @@ CONFIG_MMC_SH_MMCIF=y
|
||||||
CONFIG_NEW_LEDS=y
|
CONFIG_NEW_LEDS=y
|
||||||
CONFIG_LEDS_CLASS=y
|
CONFIG_LEDS_CLASS=y
|
||||||
CONFIG_RTC_CLASS=y
|
CONFIG_RTC_CLASS=y
|
||||||
|
CONFIG_RTC_DRV_RS5C372=y
|
||||||
CONFIG_DMADEVICES=y
|
CONFIG_DMADEVICES=y
|
||||||
CONFIG_SH_DMAE=y
|
CONFIG_SH_DMAE=y
|
||||||
CONFIG_ASYNC_TX_DMA=y
|
CONFIG_ASYNC_TX_DMA=y
|
||||||
CONFIG_STAGING=y
|
CONFIG_STAGING=y
|
||||||
# CONFIG_DNOTIFY is not set
|
# CONFIG_DNOTIFY is not set
|
||||||
# CONFIG_INOTIFY_USER is not set
|
CONFIG_INOTIFY_USER=y
|
||||||
CONFIG_VFAT_FS=y
|
CONFIG_VFAT_FS=y
|
||||||
CONFIG_TMPFS=y
|
CONFIG_TMPFS=y
|
||||||
# CONFIG_MISC_FILESYSTEMS is not set
|
# CONFIG_MISC_FILESYSTEMS is not set
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
void __init eseries_fixup(struct tag *tags, char **cmdline, struct meminfo *mi);
|
|
||||||
|
|
||||||
extern struct pxa2xx_udc_mach_info e7xx_udc_mach_info;
|
|
||||||
extern struct pxaficp_platform_data e7xx_ficp_platform_data;
|
|
||||||
extern int e7xx_irda_init(void);
|
|
||||||
|
|
||||||
extern int eseries_tmio_enable(struct platform_device *dev);
|
|
||||||
extern int eseries_tmio_disable(struct platform_device *dev);
|
|
||||||
extern int eseries_tmio_suspend(struct platform_device *dev);
|
|
||||||
extern int eseries_tmio_resume(struct platform_device *dev);
|
|
||||||
extern void eseries_get_tmio_gpios(void);
|
|
||||||
extern struct resource eseries_tmio_resources[];
|
|
||||||
extern struct platform_device e300_tc6387xb_device;
|
|
||||||
|
|
|
@ -296,27 +296,11 @@ static struct asic3_led asic3_leds[ASIC3_NUM_LEDS] = {
|
||||||
|
|
||||||
static struct resource asic3_resources[] = {
|
static struct resource asic3_resources[] = {
|
||||||
/* GPIO part */
|
/* GPIO part */
|
||||||
[0] = {
|
[0] = DEFINE_RES_MEM(ASIC3_PHYS, ASIC3_MAP_SIZE_16BIT),
|
||||||
.start = ASIC3_PHYS,
|
[1] = DEFINE_RES_IRQ(PXA_GPIO_TO_IRQ(GPIO12_HX4700_ASIC3_IRQ)),
|
||||||
.end = ASIC3_PHYS + ASIC3_MAP_SIZE_16BIT - 1,
|
|
||||||
.flags = IORESOURCE_MEM,
|
|
||||||
},
|
|
||||||
[1] = {
|
|
||||||
.start = PXA_GPIO_TO_IRQ(GPIO12_HX4700_ASIC3_IRQ),
|
|
||||||
.end = PXA_GPIO_TO_IRQ(GPIO12_HX4700_ASIC3_IRQ),
|
|
||||||
.flags = IORESOURCE_IRQ,
|
|
||||||
},
|
|
||||||
/* SD part */
|
/* SD part */
|
||||||
[2] = {
|
[2] = DEFINE_RES_MEM(ASIC3_SD_PHYS, ASIC3_MAP_SIZE_16BIT),
|
||||||
.start = ASIC3_SD_PHYS,
|
[3] = DEFINE_RES_IRQ(PXA_GPIO_TO_IRQ(GPIO66_HX4700_ASIC3_nSDIO_IRQ)),
|
||||||
.end = ASIC3_SD_PHYS + ASIC3_MAP_SIZE_16BIT - 1,
|
|
||||||
.flags = IORESOURCE_MEM,
|
|
||||||
},
|
|
||||||
[3] = {
|
|
||||||
.start = PXA_GPIO_TO_IRQ(GPIO66_HX4700_ASIC3_nSDIO_IRQ),
|
|
||||||
.end = PXA_GPIO_TO_IRQ(GPIO66_HX4700_ASIC3_nSDIO_IRQ),
|
|
||||||
.flags = IORESOURCE_IRQ,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct asic3_platform_data asic3_platform_data = {
|
static struct asic3_platform_data asic3_platform_data = {
|
||||||
|
@ -343,11 +327,7 @@ static struct platform_device asic3 = {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct resource egpio_resources[] = {
|
static struct resource egpio_resources[] = {
|
||||||
[0] = {
|
[0] = DEFINE_RES_MEM(PXA_CS5_PHYS, 0x4),
|
||||||
.start = PXA_CS5_PHYS,
|
|
||||||
.end = PXA_CS5_PHYS + 0x4 - 1,
|
|
||||||
.flags = IORESOURCE_MEM,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct htc_egpio_chip egpio_chips[] = {
|
static struct htc_egpio_chip egpio_chips[] = {
|
||||||
|
@ -537,11 +517,7 @@ static struct w100fb_mach_info w3220_info = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct resource w3220_resources[] = {
|
static struct resource w3220_resources[] = {
|
||||||
[0] = {
|
[0] = DEFINE_RES_MEM(ATI_W3220_PHYS, SZ_16M),
|
||||||
.start = ATI_W3220_PHYS,
|
|
||||||
.end = ATI_W3220_PHYS + 0x00ffffff,
|
|
||||||
.flags = IORESOURCE_MEM,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device w3220 = {
|
static struct platform_device w3220 = {
|
||||||
|
@ -683,20 +659,12 @@ static struct pda_power_pdata power_supply_info = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct resource power_supply_resources[] = {
|
static struct resource power_supply_resources[] = {
|
||||||
[0] = {
|
[0] = DEFINE_RES_NAMED(PXA_GPIO_TO_IRQ(GPIOD9_nAC_IN), 1, "ac",
|
||||||
.name = "ac",
|
IORESOURCE_IRQ |
|
||||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE |
|
IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_LOWEDGE),
|
||||||
IORESOURCE_IRQ_LOWEDGE,
|
[1] = DEFINE_RES_NAMED(PXA_GPIO_TO_IRQ(GPIOD14_nUSBC_DETECT), 1, "usb",
|
||||||
.start = PXA_GPIO_TO_IRQ(GPIOD9_nAC_IN),
|
IORESOURCE_IRQ |
|
||||||
.end = PXA_GPIO_TO_IRQ(GPIOD9_nAC_IN),
|
IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_LOWEDGE),
|
||||||
},
|
|
||||||
[1] = {
|
|
||||||
.name = "usb",
|
|
||||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE |
|
|
||||||
IORESOURCE_IRQ_LOWEDGE,
|
|
||||||
.start = PXA_GPIO_TO_IRQ(GPIOD14_nUSBC_DETECT),
|
|
||||||
.end = PXA_GPIO_TO_IRQ(GPIOD14_nUSBC_DETECT),
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device power_supply = {
|
static struct platform_device power_supply = {
|
||||||
|
|
|
@ -59,6 +59,7 @@ config MACH_G4EVM
|
||||||
bool "G4EVM board"
|
bool "G4EVM board"
|
||||||
depends on ARCH_SH7377
|
depends on ARCH_SH7377
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
|
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
||||||
|
|
||||||
config MACH_AP4EVB
|
config MACH_AP4EVB
|
||||||
bool "AP4EVB board"
|
bool "AP4EVB board"
|
||||||
|
@ -66,6 +67,7 @@ config MACH_AP4EVB
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select SH_LCD_MIPI_DSI
|
select SH_LCD_MIPI_DSI
|
||||||
select SND_SOC_AK4642 if SND_SIMPLE_CARD
|
select SND_SOC_AK4642 if SND_SIMPLE_CARD
|
||||||
|
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
||||||
|
|
||||||
choice
|
choice
|
||||||
prompt "AP4EVB LCD panel selection"
|
prompt "AP4EVB LCD panel selection"
|
||||||
|
@ -84,6 +86,7 @@ config MACH_AG5EVM
|
||||||
bool "AG5EVM board"
|
bool "AG5EVM board"
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select SH_LCD_MIPI_DSI
|
select SH_LCD_MIPI_DSI
|
||||||
|
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
||||||
depends on ARCH_SH73A0
|
depends on ARCH_SH73A0
|
||||||
|
|
||||||
config MACH_MACKEREL
|
config MACH_MACKEREL
|
||||||
|
@ -91,15 +94,18 @@ config MACH_MACKEREL
|
||||||
depends on ARCH_SH7372
|
depends on ARCH_SH7372
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select SND_SOC_AK4642 if SND_SIMPLE_CARD
|
select SND_SOC_AK4642 if SND_SIMPLE_CARD
|
||||||
|
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
||||||
|
|
||||||
config MACH_KOTA2
|
config MACH_KOTA2
|
||||||
bool "KOTA2 board"
|
bool "KOTA2 board"
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
|
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
||||||
depends on ARCH_SH73A0
|
depends on ARCH_SH73A0
|
||||||
|
|
||||||
config MACH_BONITO
|
config MACH_BONITO
|
||||||
bool "bonito board"
|
bool "bonito board"
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
|
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
||||||
depends on ARCH_R8A7740
|
depends on ARCH_R8A7740
|
||||||
|
|
||||||
config MACH_ARMADILLO800EVA
|
config MACH_ARMADILLO800EVA
|
||||||
|
@ -107,22 +113,28 @@ config MACH_ARMADILLO800EVA
|
||||||
depends on ARCH_R8A7740
|
depends on ARCH_R8A7740
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select USE_OF
|
select USE_OF
|
||||||
|
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
||||||
|
select SND_SOC_WM8978 if SND_SIMPLE_CARD
|
||||||
|
|
||||||
config MACH_MARZEN
|
config MACH_MARZEN
|
||||||
bool "MARZEN board"
|
bool "MARZEN board"
|
||||||
depends on ARCH_R8A7779
|
depends on ARCH_R8A7779
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
|
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
||||||
|
|
||||||
config MACH_KZM9D
|
config MACH_KZM9D
|
||||||
bool "KZM9D board"
|
bool "KZM9D board"
|
||||||
depends on ARCH_EMEV2
|
depends on ARCH_EMEV2
|
||||||
select USE_OF
|
select USE_OF
|
||||||
|
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
||||||
|
|
||||||
config MACH_KZM9G
|
config MACH_KZM9G
|
||||||
bool "KZM-A9-GT board"
|
bool "KZM-A9-GT board"
|
||||||
depends on ARCH_SH73A0
|
depends on ARCH_SH73A0
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select USE_OF
|
select USE_OF
|
||||||
|
select SND_SOC_AK4642 if SND_SIMPLE_CARD
|
||||||
|
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
||||||
|
|
||||||
comment "SH-Mobile System Configuration"
|
comment "SH-Mobile System Configuration"
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
#include <linux/serial_sci.h>
|
#include <linux/serial_sci.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
@ -52,6 +54,12 @@
|
||||||
#include <asm/hardware/cache-l2x0.h>
|
#include <asm/hardware/cache-l2x0.h>
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
|
|
||||||
|
/* Dummy supplies, where voltage doesn't matter */
|
||||||
|
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||||
|
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||||
|
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||||
|
};
|
||||||
|
|
||||||
static struct resource smsc9220_resources[] = {
|
static struct resource smsc9220_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = 0x14000000,
|
.start = 0x14000000,
|
||||||
|
@ -142,6 +150,13 @@ static struct platform_device fsi_device = {
|
||||||
.resource = fsi_resources,
|
.resource = fsi_resources,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Fixed 1.8V regulator to be used by MMCIF */
|
||||||
|
static struct regulator_consumer_supply fixed1v8_power_consumers[] =
|
||||||
|
{
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mmcif.0"),
|
||||||
|
};
|
||||||
|
|
||||||
static struct resource sh_mmcif_resources[] = {
|
static struct resource sh_mmcif_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.name = "MMCIF",
|
.name = "MMCIF",
|
||||||
|
@ -364,6 +379,13 @@ static struct platform_device mipidsi0_device = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Fixed 2.8V regulators to be used by SDHI0 */
|
||||||
|
static struct regulator_consumer_supply fixed2v8_power_consumers[] =
|
||||||
|
{
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),
|
||||||
|
};
|
||||||
|
|
||||||
/* SDHI0 */
|
/* SDHI0 */
|
||||||
static struct sh_mobile_sdhi_info sdhi0_info = {
|
static struct sh_mobile_sdhi_info sdhi0_info = {
|
||||||
.dma_slave_tx = SHDMA_SLAVE_SDHI0_TX,
|
.dma_slave_tx = SHDMA_SLAVE_SDHI0_TX,
|
||||||
|
@ -408,8 +430,57 @@ static struct platform_device sdhi0_device = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
void ag5evm_sdhi1_set_pwr(struct platform_device *pdev, int state)
|
/* Fixed 3.3V regulator to be used by SDHI1 */
|
||||||
|
static struct regulator_consumer_supply cn4_power_consumers[] =
|
||||||
{
|
{
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct regulator_init_data cn4_power_init_data = {
|
||||||
|
.constraints = {
|
||||||
|
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
||||||
|
},
|
||||||
|
.num_consumer_supplies = ARRAY_SIZE(cn4_power_consumers),
|
||||||
|
.consumer_supplies = cn4_power_consumers,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct fixed_voltage_config cn4_power_info = {
|
||||||
|
.supply_name = "CN4 SD/MMC Vdd",
|
||||||
|
.microvolts = 3300000,
|
||||||
|
.gpio = GPIO_PORT114,
|
||||||
|
.enable_high = 1,
|
||||||
|
.init_data = &cn4_power_init_data,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device cn4_power = {
|
||||||
|
.name = "reg-fixed-voltage",
|
||||||
|
.id = 2,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &cn4_power_info,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static void ag5evm_sdhi1_set_pwr(struct platform_device *pdev, int state)
|
||||||
|
{
|
||||||
|
static int power_gpio = -EINVAL;
|
||||||
|
|
||||||
|
if (power_gpio < 0) {
|
||||||
|
int ret = gpio_request(GPIO_PORT114, "sdhi1_power");
|
||||||
|
if (!ret) {
|
||||||
|
power_gpio = GPIO_PORT114;
|
||||||
|
gpio_direction_output(power_gpio, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If requesting the GPIO above failed, it means, that the regulator got
|
||||||
|
* probed and grabbed the GPIO, but we don't know, whether the sdhi
|
||||||
|
* driver already uses the regulator. If it doesn't, we have to toggle
|
||||||
|
* the GPIO ourselves, even though it is now owned by the fixed
|
||||||
|
* regulator driver. We have to live with the race in case the driver
|
||||||
|
* gets unloaded and the GPIO freed between these two steps.
|
||||||
|
*/
|
||||||
gpio_set_value(GPIO_PORT114, state);
|
gpio_set_value(GPIO_PORT114, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -455,6 +526,7 @@ static struct platform_device sdhi1_device = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device *ag5evm_devices[] __initdata = {
|
static struct platform_device *ag5evm_devices[] __initdata = {
|
||||||
|
&cn4_power,
|
||||||
ð_device,
|
ð_device,
|
||||||
&keysc_device,
|
&keysc_device,
|
||||||
&fsi_device,
|
&fsi_device,
|
||||||
|
@ -468,6 +540,12 @@ static struct platform_device *ag5evm_devices[] __initdata = {
|
||||||
|
|
||||||
static void __init ag5evm_init(void)
|
static void __init ag5evm_init(void)
|
||||||
{
|
{
|
||||||
|
regulator_register_always_on(0, "fixed-1.8V", fixed1v8_power_consumers,
|
||||||
|
ARRAY_SIZE(fixed1v8_power_consumers), 1800000);
|
||||||
|
regulator_register_always_on(1, "fixed-2.8V", fixed2v8_power_consumers,
|
||||||
|
ARRAY_SIZE(fixed2v8_power_consumers), 3300000);
|
||||||
|
regulator_register_fixed(3, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||||
|
|
||||||
sh73a0_pinmux_init();
|
sh73a0_pinmux_init();
|
||||||
|
|
||||||
/* enable SCIFA2 */
|
/* enable SCIFA2 */
|
||||||
|
@ -562,8 +640,6 @@ static void __init ag5evm_init(void)
|
||||||
gpio_request(GPIO_FN_SDHID1_2_PU, NULL);
|
gpio_request(GPIO_FN_SDHID1_2_PU, NULL);
|
||||||
gpio_request(GPIO_FN_SDHID1_1_PU, NULL);
|
gpio_request(GPIO_FN_SDHID1_1_PU, NULL);
|
||||||
gpio_request(GPIO_FN_SDHID1_0_PU, NULL);
|
gpio_request(GPIO_FN_SDHID1_0_PU, NULL);
|
||||||
gpio_request(GPIO_PORT114, "sdhi1_power");
|
|
||||||
gpio_direction_output(GPIO_PORT114, 0);
|
|
||||||
|
|
||||||
#ifdef CONFIG_CACHE_L2X0
|
#ifdef CONFIG_CACHE_L2X0
|
||||||
/* Shared attribute override enable, 64K*8way */
|
/* Shared attribute override enable, 64K*8way */
|
||||||
|
|
|
@ -34,6 +34,8 @@
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/i2c/tsc2007.h>
|
#include <linux/i2c/tsc2007.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
#include <linux/sh_intc.h>
|
#include <linux/sh_intc.h>
|
||||||
#include <linux/sh_clk.h>
|
#include <linux/sh_clk.h>
|
||||||
|
@ -159,6 +161,27 @@
|
||||||
* CN12: 3.3v
|
* CN12: 3.3v
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Dummy supplies, where voltage doesn't matter */
|
||||||
|
static struct regulator_consumer_supply fixed1v8_power_consumers[] =
|
||||||
|
{
|
||||||
|
/* J22 default position: 1.8V */
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"),
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mmcif.0"),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct regulator_consumer_supply fixed3v3_power_consumers[] =
|
||||||
|
{
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||||
|
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||||
|
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||||
|
};
|
||||||
|
|
||||||
/* MTD */
|
/* MTD */
|
||||||
static struct mtd_partition nor_flash_partitions[] = {
|
static struct mtd_partition nor_flash_partitions[] = {
|
||||||
{
|
{
|
||||||
|
@ -1138,21 +1161,6 @@ static void __init fsi_init_pm_clock(void)
|
||||||
clk_put(fsia_ick);
|
clk_put(fsia_ick);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* FIXME !!
|
|
||||||
*
|
|
||||||
* gpio_no_direction
|
|
||||||
* are quick_hack.
|
|
||||||
*
|
|
||||||
* current gpio frame work doesn't have
|
|
||||||
* the method to control only pull up/down/free.
|
|
||||||
* this function should be replaced by correct gpio function
|
|
||||||
*/
|
|
||||||
static void __init gpio_no_direction(u32 addr)
|
|
||||||
{
|
|
||||||
__raw_writeb(0x00, addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TouchScreen */
|
/* TouchScreen */
|
||||||
#ifdef CONFIG_AP4EVB_QHD
|
#ifdef CONFIG_AP4EVB_QHD
|
||||||
# define GPIO_TSC_IRQ GPIO_FN_IRQ28_123
|
# define GPIO_TSC_IRQ GPIO_FN_IRQ28_123
|
||||||
|
@ -1224,6 +1232,12 @@ static void __init ap4evb_init(void)
|
||||||
u32 srcr4;
|
u32 srcr4;
|
||||||
struct clk *clk;
|
struct clk *clk;
|
||||||
|
|
||||||
|
regulator_register_always_on(0, "fixed-1.8V", fixed1v8_power_consumers,
|
||||||
|
ARRAY_SIZE(fixed1v8_power_consumers), 1800000);
|
||||||
|
regulator_register_always_on(1, "fixed-3.3V", fixed3v3_power_consumers,
|
||||||
|
ARRAY_SIZE(fixed3v3_power_consumers), 3300000);
|
||||||
|
regulator_register_fixed(2, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||||
|
|
||||||
/* External clock source */
|
/* External clock source */
|
||||||
clk_set_rate(&sh7372_dv_clki_clk, 27000000);
|
clk_set_rate(&sh7372_dv_clki_clk, 27000000);
|
||||||
|
|
||||||
|
@ -1302,8 +1316,8 @@ static void __init ap4evb_init(void)
|
||||||
|
|
||||||
gpio_request(GPIO_PORT9, NULL);
|
gpio_request(GPIO_PORT9, NULL);
|
||||||
gpio_request(GPIO_PORT10, NULL);
|
gpio_request(GPIO_PORT10, NULL);
|
||||||
gpio_no_direction(GPIO_PORT9CR); /* FSIAOBT needs no direction */
|
gpio_direction_none(GPIO_PORT9CR); /* FSIAOBT needs no direction */
|
||||||
gpio_no_direction(GPIO_PORT10CR); /* FSIAOLR needs no direction */
|
gpio_direction_none(GPIO_PORT10CR); /* FSIAOLR needs no direction */
|
||||||
|
|
||||||
/* card detect pin for MMC slot (CN7) */
|
/* card detect pin for MMC slot (CN7) */
|
||||||
gpio_request(GPIO_PORT41, NULL);
|
gpio_request(GPIO_PORT41, NULL);
|
||||||
|
|
|
@ -28,6 +28,8 @@
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/gpio_keys.h>
|
#include <linux/gpio_keys.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
#include <linux/sh_eth.h>
|
#include <linux/sh_eth.h>
|
||||||
#include <linux/videodev2.h>
|
#include <linux/videodev2.h>
|
||||||
#include <linux/usb/renesas_usbhs.h>
|
#include <linux/usb/renesas_usbhs.h>
|
||||||
|
@ -37,14 +39,20 @@
|
||||||
#include <linux/mmc/sh_mobile_sdhi.h>
|
#include <linux/mmc/sh_mobile_sdhi.h>
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
#include <mach/irqs.h>
|
#include <mach/irqs.h>
|
||||||
|
#include <mach/r8a7740.h>
|
||||||
|
#include <media/mt9t112.h>
|
||||||
|
#include <media/sh_mobile_ceu.h>
|
||||||
|
#include <media/soc_camera.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
#include <asm/mach/time.h>
|
#include <asm/mach/time.h>
|
||||||
#include <asm/hardware/cache-l2x0.h>
|
#include <asm/hardware/cache-l2x0.h>
|
||||||
#include <mach/r8a7740.h>
|
|
||||||
#include <video/sh_mobile_lcdc.h>
|
#include <video/sh_mobile_lcdc.h>
|
||||||
|
#include <video/sh_mobile_hdmi.h>
|
||||||
|
#include <sound/sh_fsi.h>
|
||||||
|
#include <sound/simple_card.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CON1 Camera Module
|
* CON1 Camera Module
|
||||||
|
@ -107,6 +115,14 @@
|
||||||
*-----------+---------------+----------------------------
|
*-----------+---------------+----------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FSI-WM8978
|
||||||
|
*
|
||||||
|
* this command is required when playback.
|
||||||
|
*
|
||||||
|
* # amixer set "Headphone" 50
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB function
|
* USB function
|
||||||
*
|
*
|
||||||
|
@ -117,14 +133,8 @@
|
||||||
* These are a little bit complex.
|
* These are a little bit complex.
|
||||||
* see
|
* see
|
||||||
* usbhsf_power_ctrl()
|
* usbhsf_power_ctrl()
|
||||||
*
|
|
||||||
* CAUTION
|
|
||||||
*
|
|
||||||
* It uses autonomy mode for USB hotplug at this point
|
|
||||||
* (= usbhs_private.platform_callback.get_vbus is NULL),
|
|
||||||
* since we don't know what's happen on PM control
|
|
||||||
* on this workaround.
|
|
||||||
*/
|
*/
|
||||||
|
#define IRQ7 evt2irq(0x02e0)
|
||||||
#define USBCR1 0xe605810a
|
#define USBCR1 0xe605810a
|
||||||
#define USBH 0xC6700000
|
#define USBH 0xC6700000
|
||||||
#define USBH_USBCTR 0x10834
|
#define USBH_USBCTR 0x10834
|
||||||
|
@ -204,6 +214,20 @@ static void usbhsf_power_ctrl(struct platform_device *pdev,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int usbhsf_get_vbus(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
return gpio_get_value(GPIO_PORT209);
|
||||||
|
}
|
||||||
|
|
||||||
|
static irqreturn_t usbhsf_interrupt(int irq, void *data)
|
||||||
|
{
|
||||||
|
struct platform_device *pdev = data;
|
||||||
|
|
||||||
|
renesas_usbhs_call_notify_hotplug(pdev);
|
||||||
|
|
||||||
|
return IRQ_HANDLED;
|
||||||
|
}
|
||||||
|
|
||||||
static void usbhsf_hardware_exit(struct platform_device *pdev)
|
static void usbhsf_hardware_exit(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct usbhsf_private *priv = usbhsf_get_priv(pdev);
|
struct usbhsf_private *priv = usbhsf_get_priv(pdev);
|
||||||
|
@ -227,11 +251,14 @@ static void usbhsf_hardware_exit(struct platform_device *pdev)
|
||||||
priv->host = NULL;
|
priv->host = NULL;
|
||||||
priv->func = NULL;
|
priv->func = NULL;
|
||||||
priv->usbh_base = NULL;
|
priv->usbh_base = NULL;
|
||||||
|
|
||||||
|
free_irq(IRQ7, pdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int usbhsf_hardware_init(struct platform_device *pdev)
|
static int usbhsf_hardware_init(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct usbhsf_private *priv = usbhsf_get_priv(pdev);
|
struct usbhsf_private *priv = usbhsf_get_priv(pdev);
|
||||||
|
int ret;
|
||||||
|
|
||||||
priv->phy = clk_get(&pdev->dev, "phy");
|
priv->phy = clk_get(&pdev->dev, "phy");
|
||||||
priv->usb24 = clk_get(&pdev->dev, "usb24");
|
priv->usb24 = clk_get(&pdev->dev, "usb24");
|
||||||
|
@ -251,6 +278,14 @@ static int usbhsf_hardware_init(struct platform_device *pdev)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = request_irq(IRQ7, usbhsf_interrupt, IRQF_TRIGGER_NONE,
|
||||||
|
dev_name(&pdev->dev), pdev);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(&pdev->dev, "request_irq err\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
irq_set_irq_type(IRQ7, IRQ_TYPE_EDGE_BOTH);
|
||||||
|
|
||||||
/* usb24 use 1/1 of parent clock (= usb24s = 24MHz) */
|
/* usb24 use 1/1 of parent clock (= usb24s = 24MHz) */
|
||||||
clk_set_rate(priv->usb24,
|
clk_set_rate(priv->usb24,
|
||||||
clk_get_rate(clk_get_parent(priv->usb24)));
|
clk_get_rate(clk_get_parent(priv->usb24)));
|
||||||
|
@ -262,6 +297,7 @@ static struct usbhsf_private usbhsf_private = {
|
||||||
.info = {
|
.info = {
|
||||||
.platform_callback = {
|
.platform_callback = {
|
||||||
.get_id = usbhsf_get_id,
|
.get_id = usbhsf_get_id,
|
||||||
|
.get_vbus = usbhsf_get_vbus,
|
||||||
.hardware_init = usbhsf_hardware_init,
|
.hardware_init = usbhsf_hardware_init,
|
||||||
.hardware_exit = usbhsf_hardware_exit,
|
.hardware_exit = usbhsf_hardware_exit,
|
||||||
.power_ctrl = usbhsf_power_ctrl,
|
.power_ctrl = usbhsf_power_ctrl,
|
||||||
|
@ -269,6 +305,8 @@ static struct usbhsf_private usbhsf_private = {
|
||||||
.driver_param = {
|
.driver_param = {
|
||||||
.buswait_bwait = 5,
|
.buswait_bwait = 5,
|
||||||
.detection_delay = 5,
|
.detection_delay = 5,
|
||||||
|
.d0_rx_id = SHDMA_SLAVE_USBHS_RX,
|
||||||
|
.d1_tx_id = SHDMA_SLAVE_USBHS_TX,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -384,6 +422,103 @@ static struct platform_device lcdc0_device = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LCDC1/HDMI
|
||||||
|
*/
|
||||||
|
static struct sh_mobile_hdmi_info hdmi_info = {
|
||||||
|
.flags = HDMI_OUTPUT_PUSH_PULL |
|
||||||
|
HDMI_OUTPUT_POLARITY_HI |
|
||||||
|
HDMI_32BIT_REG |
|
||||||
|
HDMI_HAS_HTOP1 |
|
||||||
|
HDMI_SND_SRC_SPDIF,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct resource hdmi_resources[] = {
|
||||||
|
[0] = {
|
||||||
|
.name = "HDMI",
|
||||||
|
.start = 0xe6be0000,
|
||||||
|
.end = 0xe6be03ff,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
[1] = {
|
||||||
|
.start = evt2irq(0x1700),
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
.name = "HDMI emma3pf",
|
||||||
|
.start = 0xe6be4000,
|
||||||
|
.end = 0xe6be43ff,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device hdmi_device = {
|
||||||
|
.name = "sh-mobile-hdmi",
|
||||||
|
.num_resources = ARRAY_SIZE(hdmi_resources),
|
||||||
|
.resource = hdmi_resources,
|
||||||
|
.id = -1,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &hdmi_info,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct fb_videomode lcdc1_mode = {
|
||||||
|
.name = "HDMI 720p",
|
||||||
|
.xres = 1280,
|
||||||
|
.yres = 720,
|
||||||
|
.pixclock = 13468,
|
||||||
|
.left_margin = 220,
|
||||||
|
.right_margin = 110,
|
||||||
|
.hsync_len = 40,
|
||||||
|
.upper_margin = 20,
|
||||||
|
.lower_margin = 5,
|
||||||
|
.vsync_len = 5,
|
||||||
|
.refresh = 60,
|
||||||
|
.sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_HOR_HIGH_ACT,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct sh_mobile_lcdc_info hdmi_lcdc_info = {
|
||||||
|
.clock_source = LCDC_CLK_PERIPHERAL, /* HDMI clock */
|
||||||
|
.ch[0] = {
|
||||||
|
.chan = LCDC_CHAN_MAINLCD,
|
||||||
|
.fourcc = V4L2_PIX_FMT_RGB565,
|
||||||
|
.interface_type = RGB24,
|
||||||
|
.clock_divider = 1,
|
||||||
|
.flags = LCDC_FLAGS_DWPOL,
|
||||||
|
.lcd_modes = &lcdc1_mode,
|
||||||
|
.num_modes = 1,
|
||||||
|
.tx_dev = &hdmi_device,
|
||||||
|
.panel_cfg = {
|
||||||
|
.width = 1280,
|
||||||
|
.height = 720,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct resource hdmi_lcdc_resources[] = {
|
||||||
|
[0] = {
|
||||||
|
.name = "LCDC1",
|
||||||
|
.start = 0xfe944000,
|
||||||
|
.end = 0xfe948000 - 1,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
[1] = {
|
||||||
|
.start = intcs_evt2irq(0x1780),
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device hdmi_lcdc_device = {
|
||||||
|
.name = "sh_mobile_lcdc_fb",
|
||||||
|
.num_resources = ARRAY_SIZE(hdmi_lcdc_resources),
|
||||||
|
.resource = hdmi_lcdc_resources,
|
||||||
|
.id = 1,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &hdmi_lcdc_info,
|
||||||
|
.coherent_dma_mask = ~0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
/* GPIO KEY */
|
/* GPIO KEY */
|
||||||
#define GPIO_KEY(c, g, d) { .code = c, .gpio = g, .desc = d, .active_low = 1 }
|
#define GPIO_KEY(c, g, d) { .code = c, .gpio = g, .desc = d, .active_low = 1 }
|
||||||
|
|
||||||
|
@ -407,6 +542,17 @@ static struct platform_device gpio_keys_device = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Fixed 3.3V regulator to be used by SDHI0, SDHI1, MMCIF */
|
||||||
|
static struct regulator_consumer_supply fixed3v3_power_consumers[] =
|
||||||
|
{
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"),
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mmcif"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mmcif"),
|
||||||
|
};
|
||||||
|
|
||||||
/* SDHI0 */
|
/* SDHI0 */
|
||||||
/*
|
/*
|
||||||
* FIXME
|
* FIXME
|
||||||
|
@ -418,6 +564,8 @@ static struct platform_device gpio_keys_device = {
|
||||||
*/
|
*/
|
||||||
#define IRQ31 evt2irq(0x33E0)
|
#define IRQ31 evt2irq(0x33E0)
|
||||||
static struct sh_mobile_sdhi_info sdhi0_info = {
|
static struct sh_mobile_sdhi_info sdhi0_info = {
|
||||||
|
.dma_slave_tx = SHDMA_SLAVE_SDHI0_TX,
|
||||||
|
.dma_slave_rx = SHDMA_SLAVE_SDHI0_RX,
|
||||||
.tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |\
|
.tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |\
|
||||||
MMC_CAP_NEEDS_POLL,
|
MMC_CAP_NEEDS_POLL,
|
||||||
.tmio_ocr_mask = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34,
|
.tmio_ocr_mask = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||||
|
@ -458,6 +606,8 @@ static struct platform_device sdhi0_device = {
|
||||||
|
|
||||||
/* SDHI1 */
|
/* SDHI1 */
|
||||||
static struct sh_mobile_sdhi_info sdhi1_info = {
|
static struct sh_mobile_sdhi_info sdhi1_info = {
|
||||||
|
.dma_slave_tx = SHDMA_SLAVE_SDHI1_TX,
|
||||||
|
.dma_slave_rx = SHDMA_SLAVE_SDHI1_RX,
|
||||||
.tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ,
|
.tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ,
|
||||||
.tmio_ocr_mask = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34,
|
.tmio_ocr_mask = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||||
.tmio_flags = TMIO_MMC_HAS_IDLE_WAIT,
|
.tmio_flags = TMIO_MMC_HAS_IDLE_WAIT,
|
||||||
|
@ -532,12 +682,209 @@ static struct platform_device sh_mmcif_device = {
|
||||||
.resource = sh_mmcif_resources,
|
.resource = sh_mmcif_resources,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Camera */
|
||||||
|
static int mt9t111_power(struct device *dev, int mode)
|
||||||
|
{
|
||||||
|
struct clk *mclk = clk_get(NULL, "video1");
|
||||||
|
|
||||||
|
if (IS_ERR(mclk)) {
|
||||||
|
dev_err(dev, "can't get video1 clock\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mode) {
|
||||||
|
/* video1 (= CON1 camera) expect 24MHz */
|
||||||
|
clk_set_rate(mclk, clk_round_rate(mclk, 24000000));
|
||||||
|
clk_enable(mclk);
|
||||||
|
gpio_direction_output(GPIO_PORT158, 1);
|
||||||
|
} else {
|
||||||
|
gpio_direction_output(GPIO_PORT158, 0);
|
||||||
|
clk_disable(mclk);
|
||||||
|
}
|
||||||
|
|
||||||
|
clk_put(mclk);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct i2c_board_info i2c_camera_mt9t111 = {
|
||||||
|
I2C_BOARD_INFO("mt9t112", 0x3d),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct mt9t112_camera_info mt9t111_info = {
|
||||||
|
.divider = { 16, 0, 0, 7, 0, 10, 14, 7, 7 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct soc_camera_link mt9t111_link = {
|
||||||
|
.i2c_adapter_id = 0,
|
||||||
|
.bus_id = 0,
|
||||||
|
.board_info = &i2c_camera_mt9t111,
|
||||||
|
.power = mt9t111_power,
|
||||||
|
.priv = &mt9t111_info,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device camera_device = {
|
||||||
|
.name = "soc-camera-pdrv",
|
||||||
|
.id = 0,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &mt9t111_link,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* CEU0 */
|
||||||
|
static struct sh_mobile_ceu_info sh_mobile_ceu0_info = {
|
||||||
|
.flags = SH_CEU_FLAG_LOWER_8BIT,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct resource ceu0_resources[] = {
|
||||||
|
[0] = {
|
||||||
|
.name = "CEU",
|
||||||
|
.start = 0xfe910000,
|
||||||
|
.end = 0xfe91009f,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
[1] = {
|
||||||
|
.start = intcs_evt2irq(0x0500),
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
/* place holder for contiguous memory */
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device ceu0_device = {
|
||||||
|
.name = "sh_mobile_ceu",
|
||||||
|
.id = 0,
|
||||||
|
.num_resources = ARRAY_SIZE(ceu0_resources),
|
||||||
|
.resource = ceu0_resources,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &sh_mobile_ceu0_info,
|
||||||
|
.coherent_dma_mask = 0xffffffff,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* FSI */
|
||||||
|
static int fsi_hdmi_set_rate(struct device *dev, int rate, int enable)
|
||||||
|
{
|
||||||
|
struct clk *fsib;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* it support 48KHz only */
|
||||||
|
if (48000 != rate)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
fsib = clk_get(dev, "ickb");
|
||||||
|
if (IS_ERR(fsib))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (enable) {
|
||||||
|
ret = SH_FSI_ACKMD_256 | SH_FSI_BPFMD_64;
|
||||||
|
clk_enable(fsib);
|
||||||
|
} else {
|
||||||
|
ret = 0;
|
||||||
|
clk_disable(fsib);
|
||||||
|
}
|
||||||
|
|
||||||
|
clk_put(fsib);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct sh_fsi_platform_info fsi_info = {
|
||||||
|
/* FSI-WM8978 */
|
||||||
|
.port_a = {
|
||||||
|
.tx_id = SHDMA_SLAVE_FSIA_TX,
|
||||||
|
},
|
||||||
|
/* FSI-HDMI */
|
||||||
|
.port_b = {
|
||||||
|
.flags = SH_FSI_FMT_SPDIF |
|
||||||
|
SH_FSI_ENABLE_STREAM_MODE,
|
||||||
|
.set_rate = fsi_hdmi_set_rate,
|
||||||
|
.tx_id = SHDMA_SLAVE_FSIB_TX,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct resource fsi_resources[] = {
|
||||||
|
[0] = {
|
||||||
|
.name = "FSI",
|
||||||
|
.start = 0xfe1f0000,
|
||||||
|
.end = 0xfe1f8400 - 1,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
[1] = {
|
||||||
|
.start = evt2irq(0x1840),
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device fsi_device = {
|
||||||
|
.name = "sh_fsi2",
|
||||||
|
.id = -1,
|
||||||
|
.num_resources = ARRAY_SIZE(fsi_resources),
|
||||||
|
.resource = fsi_resources,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &fsi_info,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* FSI-WM8978 */
|
||||||
|
static struct asoc_simple_dai_init_info fsi_wm8978_init_info = {
|
||||||
|
.fmt = SND_SOC_DAIFMT_I2S,
|
||||||
|
.codec_daifmt = SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_NB_NF,
|
||||||
|
.cpu_daifmt = SND_SOC_DAIFMT_CBS_CFS,
|
||||||
|
.sysclk = 12288000,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct asoc_simple_card_info fsi_wm8978_info = {
|
||||||
|
.name = "wm8978",
|
||||||
|
.card = "FSI2A-WM8978",
|
||||||
|
.cpu_dai = "fsia-dai",
|
||||||
|
.codec = "wm8978.0-001a",
|
||||||
|
.platform = "sh_fsi2",
|
||||||
|
.codec_dai = "wm8978-hifi",
|
||||||
|
.init = &fsi_wm8978_init_info,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device fsi_wm8978_device = {
|
||||||
|
.name = "asoc-simple-card",
|
||||||
|
.id = 0,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &fsi_wm8978_info,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* FSI-HDMI */
|
||||||
|
static struct asoc_simple_dai_init_info fsi2_hdmi_init_info = {
|
||||||
|
.cpu_daifmt = SND_SOC_DAIFMT_CBM_CFM,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct asoc_simple_card_info fsi2_hdmi_info = {
|
||||||
|
.name = "HDMI",
|
||||||
|
.card = "FSI2B-HDMI",
|
||||||
|
.cpu_dai = "fsib-dai",
|
||||||
|
.codec = "sh-mobile-hdmi",
|
||||||
|
.platform = "sh_fsi2",
|
||||||
|
.codec_dai = "sh_mobile_hdmi-hifi",
|
||||||
|
.init = &fsi2_hdmi_init_info,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device fsi_hdmi_device = {
|
||||||
|
.name = "asoc-simple-card",
|
||||||
|
.id = 1,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &fsi2_hdmi_info,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
/* I2C */
|
/* I2C */
|
||||||
static struct i2c_board_info i2c0_devices[] = {
|
static struct i2c_board_info i2c0_devices[] = {
|
||||||
{
|
{
|
||||||
I2C_BOARD_INFO("st1232-ts", 0x55),
|
I2C_BOARD_INFO("st1232-ts", 0x55),
|
||||||
.irq = evt2irq(0x0340),
|
.irq = evt2irq(0x0340),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
I2C_BOARD_INFO("wm8978", 0x1a),
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -549,6 +896,13 @@ static struct platform_device *eva_devices[] __initdata = {
|
||||||
&sh_eth_device,
|
&sh_eth_device,
|
||||||
&sdhi0_device,
|
&sdhi0_device,
|
||||||
&sh_mmcif_device,
|
&sh_mmcif_device,
|
||||||
|
&hdmi_device,
|
||||||
|
&hdmi_lcdc_device,
|
||||||
|
&camera_device,
|
||||||
|
&ceu0_device,
|
||||||
|
&fsi_device,
|
||||||
|
&fsi_hdmi_device,
|
||||||
|
&fsi_wm8978_device,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __init eva_clock_init(void)
|
static void __init eva_clock_init(void)
|
||||||
|
@ -556,10 +910,14 @@ static void __init eva_clock_init(void)
|
||||||
struct clk *system = clk_get(NULL, "system_clk");
|
struct clk *system = clk_get(NULL, "system_clk");
|
||||||
struct clk *xtal1 = clk_get(NULL, "extal1");
|
struct clk *xtal1 = clk_get(NULL, "extal1");
|
||||||
struct clk *usb24s = clk_get(NULL, "usb24s");
|
struct clk *usb24s = clk_get(NULL, "usb24s");
|
||||||
|
struct clk *fsibck = clk_get(NULL, "fsibck");
|
||||||
|
struct clk *fsib = clk_get(&fsi_device.dev, "ickb");
|
||||||
|
|
||||||
if (IS_ERR(system) ||
|
if (IS_ERR(system) ||
|
||||||
IS_ERR(xtal1) ||
|
IS_ERR(xtal1) ||
|
||||||
IS_ERR(usb24s)) {
|
IS_ERR(usb24s) ||
|
||||||
|
IS_ERR(fsibck) ||
|
||||||
|
IS_ERR(fsib)) {
|
||||||
pr_err("armadillo800eva board clock init failed\n");
|
pr_err("armadillo800eva board clock init failed\n");
|
||||||
goto clock_error;
|
goto clock_error;
|
||||||
}
|
}
|
||||||
|
@ -570,6 +928,11 @@ static void __init eva_clock_init(void)
|
||||||
/* usb24s use extal1 (= system) clock (= 24MHz) */
|
/* usb24s use extal1 (= system) clock (= 24MHz) */
|
||||||
clk_set_parent(usb24s, system);
|
clk_set_parent(usb24s, system);
|
||||||
|
|
||||||
|
/* FSIBCK is 12.288MHz, and it is parent of FSI-B */
|
||||||
|
clk_set_parent(fsib, fsibck);
|
||||||
|
clk_set_rate(fsibck, 12288000);
|
||||||
|
clk_set_rate(fsib, 12288000);
|
||||||
|
|
||||||
clock_error:
|
clock_error:
|
||||||
if (!IS_ERR(system))
|
if (!IS_ERR(system))
|
||||||
clk_put(system);
|
clk_put(system);
|
||||||
|
@ -577,14 +940,23 @@ clock_error:
|
||||||
clk_put(xtal1);
|
clk_put(xtal1);
|
||||||
if (!IS_ERR(usb24s))
|
if (!IS_ERR(usb24s))
|
||||||
clk_put(usb24s);
|
clk_put(usb24s);
|
||||||
|
if (!IS_ERR(fsibck))
|
||||||
|
clk_put(fsibck);
|
||||||
|
if (!IS_ERR(fsib))
|
||||||
|
clk_put(fsib);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* board init
|
* board init
|
||||||
*/
|
*/
|
||||||
|
#define GPIO_PORT7CR 0xe6050007
|
||||||
|
#define GPIO_PORT8CR 0xe6050008
|
||||||
static void __init eva_init(void)
|
static void __init eva_init(void)
|
||||||
{
|
{
|
||||||
eva_clock_init();
|
struct platform_device *usb = NULL;
|
||||||
|
|
||||||
|
regulator_register_always_on(0, "fixed-3.3V", fixed3v3_power_consumers,
|
||||||
|
ARRAY_SIZE(fixed3v3_power_consumers), 3300000);
|
||||||
|
|
||||||
r8a7740_pinmux_init();
|
r8a7740_pinmux_init();
|
||||||
r8a7740_meram_workaround();
|
r8a7740_meram_workaround();
|
||||||
|
@ -668,8 +1040,19 @@ static void __init eva_init(void)
|
||||||
/* USB Host */
|
/* USB Host */
|
||||||
} else {
|
} else {
|
||||||
/* USB Func */
|
/* USB Func */
|
||||||
gpio_request(GPIO_FN_VBUS, NULL);
|
/*
|
||||||
|
* A1 chip has 2 IRQ7 pin and it was controled by MSEL register.
|
||||||
|
* OTOH, usbhs interrupt needs its value (HI/LOW) to decide
|
||||||
|
* USB connection/disconnection (usbhsf_get_vbus()).
|
||||||
|
* This means we needs to select GPIO_FN_IRQ7_PORT209 first,
|
||||||
|
* and select GPIO_PORT209 here
|
||||||
|
*/
|
||||||
|
gpio_request(GPIO_FN_IRQ7_PORT209, NULL);
|
||||||
|
gpio_request(GPIO_PORT209, NULL);
|
||||||
|
gpio_direction_input(GPIO_PORT209);
|
||||||
|
|
||||||
platform_device_register(&usbhsf_device);
|
platform_device_register(&usbhsf_device);
|
||||||
|
usb = &usbhsf_device;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SDHI0 */
|
/* SDHI0 */
|
||||||
|
@ -707,6 +1090,48 @@ static void __init eva_init(void)
|
||||||
gpio_request(GPIO_FN_MMC1_D6_PORT143, NULL);
|
gpio_request(GPIO_FN_MMC1_D6_PORT143, NULL);
|
||||||
gpio_request(GPIO_FN_MMC1_D7_PORT142, NULL);
|
gpio_request(GPIO_FN_MMC1_D7_PORT142, NULL);
|
||||||
|
|
||||||
|
/* CEU0 */
|
||||||
|
gpio_request(GPIO_FN_VIO0_D7, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO0_D6, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO0_D5, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO0_D4, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO0_D3, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO0_D2, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO0_D1, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO0_D0, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO0_CLK, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO0_HD, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO0_VD, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO0_FIELD, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_CKO, NULL);
|
||||||
|
|
||||||
|
/* CON1/CON15 Camera */
|
||||||
|
gpio_request(GPIO_PORT173, NULL); /* STANDBY */
|
||||||
|
gpio_request(GPIO_PORT172, NULL); /* RST */
|
||||||
|
gpio_request(GPIO_PORT158, NULL); /* CAM_PON */
|
||||||
|
gpio_direction_output(GPIO_PORT173, 0);
|
||||||
|
gpio_direction_output(GPIO_PORT172, 1);
|
||||||
|
gpio_direction_output(GPIO_PORT158, 0); /* see mt9t111_power() */
|
||||||
|
|
||||||
|
/* FSI-WM8978 */
|
||||||
|
gpio_request(GPIO_FN_FSIAIBT, NULL);
|
||||||
|
gpio_request(GPIO_FN_FSIAILR, NULL);
|
||||||
|
gpio_request(GPIO_FN_FSIAOMC, NULL);
|
||||||
|
gpio_request(GPIO_FN_FSIAOSLD, NULL);
|
||||||
|
gpio_request(GPIO_FN_FSIAISLD_PORT5, NULL);
|
||||||
|
|
||||||
|
gpio_request(GPIO_PORT7, NULL);
|
||||||
|
gpio_request(GPIO_PORT8, NULL);
|
||||||
|
gpio_direction_none(GPIO_PORT7CR); /* FSIAOBT needs no direction */
|
||||||
|
gpio_direction_none(GPIO_PORT8CR); /* FSIAOLR needs no direction */
|
||||||
|
|
||||||
|
/* FSI-HDMI */
|
||||||
|
gpio_request(GPIO_FN_FSIBCK, NULL);
|
||||||
|
|
||||||
|
/* HDMI */
|
||||||
|
gpio_request(GPIO_FN_HDMI_HPD, NULL);
|
||||||
|
gpio_request(GPIO_FN_HDMI_CEC, NULL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CAUTION
|
* CAUTION
|
||||||
*
|
*
|
||||||
|
@ -753,6 +1178,13 @@ static void __init eva_init(void)
|
||||||
|
|
||||||
platform_add_devices(eva_devices,
|
platform_add_devices(eva_devices,
|
||||||
ARRAY_SIZE(eva_devices));
|
ARRAY_SIZE(eva_devices));
|
||||||
|
|
||||||
|
eva_clock_init();
|
||||||
|
|
||||||
|
rmobile_add_device_to_domain(&r8a7740_pd_a4lc, &lcdc0_device);
|
||||||
|
rmobile_add_device_to_domain(&r8a7740_pd_a4lc, &hdmi_lcdc_device);
|
||||||
|
if (usb)
|
||||||
|
rmobile_add_device_to_domain(&r8a7740_pd_a3sp, usb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init eva_earlytimer_init(void)
|
static void __init eva_earlytimer_init(void)
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
#include <linux/videodev2.h>
|
#include <linux/videodev2.h>
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
|
@ -75,6 +77,12 @@
|
||||||
* S38.2 = OFF
|
* S38.2 = OFF
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Dummy supplies, where voltage doesn't matter */
|
||||||
|
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||||
|
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||||
|
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FPGA
|
* FPGA
|
||||||
*/
|
*/
|
||||||
|
@ -360,6 +368,8 @@ static void __init bonito_init(void)
|
||||||
{
|
{
|
||||||
u16 val;
|
u16 val;
|
||||||
|
|
||||||
|
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||||
|
|
||||||
r8a7740_pinmux_init();
|
r8a7740_pinmux_init();
|
||||||
bonito_fpga_init();
|
bonito_fpga_init();
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
#include <linux/usb/r8a66597.h>
|
#include <linux/usb/r8a66597.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
|
@ -196,6 +198,15 @@ static struct platform_device keysc_device = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Fixed 3.3V regulator to be used by SDHI0 and SDHI1 */
|
||||||
|
static struct regulator_consumer_supply fixed3v3_power_consumers[] =
|
||||||
|
{
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"),
|
||||||
|
};
|
||||||
|
|
||||||
/* SDHI */
|
/* SDHI */
|
||||||
static struct sh_mobile_sdhi_info sdhi0_info = {
|
static struct sh_mobile_sdhi_info sdhi0_info = {
|
||||||
.tmio_caps = MMC_CAP_SDIO_IRQ,
|
.tmio_caps = MMC_CAP_SDIO_IRQ,
|
||||||
|
@ -271,26 +282,11 @@ static struct platform_device *g4evm_devices[] __initdata = {
|
||||||
#define GPIO_SDHID1_D3 0xe6052106
|
#define GPIO_SDHID1_D3 0xe6052106
|
||||||
#define GPIO_SDHICMD1 0xe6052107
|
#define GPIO_SDHICMD1 0xe6052107
|
||||||
|
|
||||||
/*
|
|
||||||
* FIXME !!
|
|
||||||
*
|
|
||||||
* gpio_pull_up is quick_hack.
|
|
||||||
*
|
|
||||||
* current gpio frame work doesn't have
|
|
||||||
* the method to control only pull up/down/free.
|
|
||||||
* this function should be replaced by correct gpio function
|
|
||||||
*/
|
|
||||||
static void __init gpio_pull_up(u32 addr)
|
|
||||||
{
|
|
||||||
u8 data = __raw_readb(addr);
|
|
||||||
|
|
||||||
data &= 0x0F;
|
|
||||||
data |= 0xC0;
|
|
||||||
__raw_writeb(data, addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init g4evm_init(void)
|
static void __init g4evm_init(void)
|
||||||
{
|
{
|
||||||
|
regulator_register_always_on(0, "fixed-3.3V", fixed3v3_power_consumers,
|
||||||
|
ARRAY_SIZE(fixed3v3_power_consumers), 3300000);
|
||||||
|
|
||||||
sh7377_pinmux_init();
|
sh7377_pinmux_init();
|
||||||
|
|
||||||
/* Lit DS14 LED */
|
/* Lit DS14 LED */
|
||||||
|
@ -351,11 +347,11 @@ static void __init g4evm_init(void)
|
||||||
gpio_request(GPIO_FN_SDHID0_3, NULL);
|
gpio_request(GPIO_FN_SDHID0_3, NULL);
|
||||||
gpio_request(GPIO_FN_SDHICMD0, NULL);
|
gpio_request(GPIO_FN_SDHICMD0, NULL);
|
||||||
gpio_request(GPIO_FN_SDHIWP0, NULL);
|
gpio_request(GPIO_FN_SDHIWP0, NULL);
|
||||||
gpio_pull_up(GPIO_SDHID0_D0);
|
gpio_request_pullup(GPIO_SDHID0_D0);
|
||||||
gpio_pull_up(GPIO_SDHID0_D1);
|
gpio_request_pullup(GPIO_SDHID0_D1);
|
||||||
gpio_pull_up(GPIO_SDHID0_D2);
|
gpio_request_pullup(GPIO_SDHID0_D2);
|
||||||
gpio_pull_up(GPIO_SDHID0_D3);
|
gpio_request_pullup(GPIO_SDHID0_D3);
|
||||||
gpio_pull_up(GPIO_SDHICMD0);
|
gpio_request_pullup(GPIO_SDHICMD0);
|
||||||
|
|
||||||
/* SDHI1 */
|
/* SDHI1 */
|
||||||
gpio_request(GPIO_FN_SDHICLK1, NULL);
|
gpio_request(GPIO_FN_SDHICLK1, NULL);
|
||||||
|
@ -364,11 +360,11 @@ static void __init g4evm_init(void)
|
||||||
gpio_request(GPIO_FN_SDHID1_2, NULL);
|
gpio_request(GPIO_FN_SDHID1_2, NULL);
|
||||||
gpio_request(GPIO_FN_SDHID1_3, NULL);
|
gpio_request(GPIO_FN_SDHID1_3, NULL);
|
||||||
gpio_request(GPIO_FN_SDHICMD1, NULL);
|
gpio_request(GPIO_FN_SDHICMD1, NULL);
|
||||||
gpio_pull_up(GPIO_SDHID1_D0);
|
gpio_request_pullup(GPIO_SDHID1_D0);
|
||||||
gpio_pull_up(GPIO_SDHID1_D1);
|
gpio_request_pullup(GPIO_SDHID1_D1);
|
||||||
gpio_pull_up(GPIO_SDHID1_D2);
|
gpio_request_pullup(GPIO_SDHID1_D2);
|
||||||
gpio_pull_up(GPIO_SDHID1_D3);
|
gpio_request_pullup(GPIO_SDHID1_D3);
|
||||||
gpio_pull_up(GPIO_SDHICMD1);
|
gpio_request_pullup(GPIO_SDHICMD1);
|
||||||
|
|
||||||
sh7377_add_standard_devices();
|
sh7377_add_standard_devices();
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
|
@ -49,6 +51,12 @@
|
||||||
#include <asm/hardware/cache-l2x0.h>
|
#include <asm/hardware/cache-l2x0.h>
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
|
|
||||||
|
/* Dummy supplies, where voltage doesn't matter */
|
||||||
|
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||||
|
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||||
|
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||||
|
};
|
||||||
|
|
||||||
/* SMSC 9220 */
|
/* SMSC 9220 */
|
||||||
static struct resource smsc9220_resources[] = {
|
static struct resource smsc9220_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
|
@ -288,6 +296,13 @@ static struct platform_device leds_tpu30_device = {
|
||||||
.resource = tpu30_resources,
|
.resource = tpu30_resources,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Fixed 1.8V regulator to be used by MMCIF */
|
||||||
|
static struct regulator_consumer_supply fixed1v8_power_consumers[] =
|
||||||
|
{
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mmcif.0"),
|
||||||
|
};
|
||||||
|
|
||||||
/* MMCIF */
|
/* MMCIF */
|
||||||
static struct resource mmcif_resources[] = {
|
static struct resource mmcif_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
|
@ -321,6 +336,15 @@ static struct platform_device mmcif_device = {
|
||||||
.resource = mmcif_resources,
|
.resource = mmcif_resources,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Fixed 3.3V regulator to be used by SDHI0 and SDHI1 */
|
||||||
|
static struct regulator_consumer_supply fixed3v3_power_consumers[] =
|
||||||
|
{
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"),
|
||||||
|
};
|
||||||
|
|
||||||
/* SDHI0 */
|
/* SDHI0 */
|
||||||
static struct sh_mobile_sdhi_info sdhi0_info = {
|
static struct sh_mobile_sdhi_info sdhi0_info = {
|
||||||
.tmio_caps = MMC_CAP_SD_HIGHSPEED,
|
.tmio_caps = MMC_CAP_SD_HIGHSPEED,
|
||||||
|
@ -411,6 +435,12 @@ static struct platform_device *kota2_devices[] __initdata = {
|
||||||
|
|
||||||
static void __init kota2_init(void)
|
static void __init kota2_init(void)
|
||||||
{
|
{
|
||||||
|
regulator_register_always_on(0, "fixed-1.8V", fixed1v8_power_consumers,
|
||||||
|
ARRAY_SIZE(fixed1v8_power_consumers), 1800000);
|
||||||
|
regulator_register_always_on(1, "fixed-3.3V", fixed3v3_power_consumers,
|
||||||
|
ARRAY_SIZE(fixed3v3_power_consumers), 3300000);
|
||||||
|
regulator_register_fixed(2, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||||
|
|
||||||
sh73a0_pinmux_init();
|
sh73a0_pinmux_init();
|
||||||
|
|
||||||
/* SCIFA2 (UART2) */
|
/* SCIFA2 (UART2) */
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
#include <mach/emev2.h>
|
#include <mach/emev2.h>
|
||||||
|
@ -28,6 +30,12 @@
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
#include <asm/hardware/gic.h>
|
#include <asm/hardware/gic.h>
|
||||||
|
|
||||||
|
/* Dummy supplies, where voltage doesn't matter */
|
||||||
|
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||||
|
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||||
|
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||||
|
};
|
||||||
|
|
||||||
/* Ether */
|
/* Ether */
|
||||||
static struct resource smsc911x_resources[] = {
|
static struct resource smsc911x_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
|
@ -63,6 +71,8 @@ static struct platform_device *kzm9d_devices[] __initdata = {
|
||||||
|
|
||||||
void __init kzm9d_add_standard_devices(void)
|
void __init kzm9d_add_standard_devices(void)
|
||||||
{
|
{
|
||||||
|
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||||
|
|
||||||
emev2_add_standard_devices();
|
emev2_add_standard_devices();
|
||||||
|
|
||||||
platform_add_devices(kzm9d_devices, ARRAY_SIZE(kzm9d_devices));
|
platform_add_devices(kzm9d_devices, ARRAY_SIZE(kzm9d_devices));
|
||||||
|
|
|
@ -30,9 +30,14 @@
|
||||||
#include <linux/mmc/sh_mobile_sdhi.h>
|
#include <linux/mmc/sh_mobile_sdhi.h>
|
||||||
#include <linux/mfd/tmio.h>
|
#include <linux/mfd/tmio.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
#include <linux/usb/r8a66597.h>
|
#include <linux/usb/r8a66597.h>
|
||||||
|
#include <linux/usb/renesas_usbhs.h>
|
||||||
#include <linux/videodev2.h>
|
#include <linux/videodev2.h>
|
||||||
|
#include <sound/sh_fsi.h>
|
||||||
|
#include <sound/simple_card.h>
|
||||||
#include <mach/irqs.h>
|
#include <mach/irqs.h>
|
||||||
#include <mach/sh73a0.h>
|
#include <mach/sh73a0.h>
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
|
@ -54,6 +59,20 @@
|
||||||
#define GPIO_PCF8575_PORT15 (GPIO_NR + 13)
|
#define GPIO_PCF8575_PORT15 (GPIO_NR + 13)
|
||||||
#define GPIO_PCF8575_PORT16 (GPIO_NR + 14)
|
#define GPIO_PCF8575_PORT16 (GPIO_NR + 14)
|
||||||
|
|
||||||
|
/* Dummy supplies, where voltage doesn't matter */
|
||||||
|
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||||
|
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||||
|
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FSI-AK4648
|
||||||
|
*
|
||||||
|
* this command is required when playback.
|
||||||
|
*
|
||||||
|
* # amixer set "LINEOUT Mixer DACL" on
|
||||||
|
*/
|
||||||
|
|
||||||
/* SMSC 9221 */
|
/* SMSC 9221 */
|
||||||
static struct resource smsc9221_resources[] = {
|
static struct resource smsc9221_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
|
@ -112,6 +131,151 @@ static struct platform_device usb_host_device = {
|
||||||
.resource = usb_resources,
|
.resource = usb_resources,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* USB Func CN17 */
|
||||||
|
struct usbhs_private {
|
||||||
|
unsigned int phy;
|
||||||
|
unsigned int cr2;
|
||||||
|
struct renesas_usbhs_platform_info info;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IRQ15 intcs_evt2irq(0x03e0)
|
||||||
|
#define USB_PHY_MODE (1 << 4)
|
||||||
|
#define USB_PHY_INT_EN ((1 << 3) | (1 << 2))
|
||||||
|
#define USB_PHY_ON (1 << 1)
|
||||||
|
#define USB_PHY_OFF (1 << 0)
|
||||||
|
#define USB_PHY_INT_CLR (USB_PHY_ON | USB_PHY_OFF)
|
||||||
|
|
||||||
|
#define usbhs_get_priv(pdev) \
|
||||||
|
container_of(renesas_usbhs_get_info(pdev), struct usbhs_private, info)
|
||||||
|
|
||||||
|
static int usbhs_get_vbus(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
struct usbhs_private *priv = usbhs_get_priv(pdev);
|
||||||
|
|
||||||
|
return !((1 << 7) & __raw_readw(priv->cr2));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void usbhs_phy_reset(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
struct usbhs_private *priv = usbhs_get_priv(pdev);
|
||||||
|
|
||||||
|
/* init phy */
|
||||||
|
__raw_writew(0x8a0a, priv->cr2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int usbhs_get_id(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
return USBHS_GADGET;
|
||||||
|
}
|
||||||
|
|
||||||
|
static irqreturn_t usbhs_interrupt(int irq, void *data)
|
||||||
|
{
|
||||||
|
struct platform_device *pdev = data;
|
||||||
|
struct usbhs_private *priv = usbhs_get_priv(pdev);
|
||||||
|
|
||||||
|
renesas_usbhs_call_notify_hotplug(pdev);
|
||||||
|
|
||||||
|
/* clear status */
|
||||||
|
__raw_writew(__raw_readw(priv->phy) | USB_PHY_INT_CLR, priv->phy);
|
||||||
|
|
||||||
|
return IRQ_HANDLED;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int usbhs_hardware_init(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
struct usbhs_private *priv = usbhs_get_priv(pdev);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* clear interrupt status */
|
||||||
|
__raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->phy);
|
||||||
|
|
||||||
|
ret = request_irq(IRQ15, usbhs_interrupt, IRQF_TRIGGER_HIGH,
|
||||||
|
dev_name(&pdev->dev), pdev);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(&pdev->dev, "request_irq err\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* enable USB phy interrupt */
|
||||||
|
__raw_writew(USB_PHY_MODE | USB_PHY_INT_EN, priv->phy);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void usbhs_hardware_exit(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
struct usbhs_private *priv = usbhs_get_priv(pdev);
|
||||||
|
|
||||||
|
/* clear interrupt status */
|
||||||
|
__raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->phy);
|
||||||
|
|
||||||
|
free_irq(IRQ15, pdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
static u32 usbhs_pipe_cfg[] = {
|
||||||
|
USB_ENDPOINT_XFER_CONTROL,
|
||||||
|
USB_ENDPOINT_XFER_ISOC,
|
||||||
|
USB_ENDPOINT_XFER_ISOC,
|
||||||
|
USB_ENDPOINT_XFER_BULK,
|
||||||
|
USB_ENDPOINT_XFER_BULK,
|
||||||
|
USB_ENDPOINT_XFER_BULK,
|
||||||
|
USB_ENDPOINT_XFER_INT,
|
||||||
|
USB_ENDPOINT_XFER_INT,
|
||||||
|
USB_ENDPOINT_XFER_INT,
|
||||||
|
USB_ENDPOINT_XFER_BULK,
|
||||||
|
USB_ENDPOINT_XFER_BULK,
|
||||||
|
USB_ENDPOINT_XFER_BULK,
|
||||||
|
USB_ENDPOINT_XFER_BULK,
|
||||||
|
USB_ENDPOINT_XFER_BULK,
|
||||||
|
USB_ENDPOINT_XFER_BULK,
|
||||||
|
USB_ENDPOINT_XFER_BULK,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct usbhs_private usbhs_private = {
|
||||||
|
.phy = 0xe60781e0, /* USBPHYINT */
|
||||||
|
.cr2 = 0xe605810c, /* USBCR2 */
|
||||||
|
.info = {
|
||||||
|
.platform_callback = {
|
||||||
|
.hardware_init = usbhs_hardware_init,
|
||||||
|
.hardware_exit = usbhs_hardware_exit,
|
||||||
|
.get_id = usbhs_get_id,
|
||||||
|
.phy_reset = usbhs_phy_reset,
|
||||||
|
.get_vbus = usbhs_get_vbus,
|
||||||
|
},
|
||||||
|
.driver_param = {
|
||||||
|
.buswait_bwait = 4,
|
||||||
|
.has_otg = 1,
|
||||||
|
.pipe_type = usbhs_pipe_cfg,
|
||||||
|
.pipe_size = ARRAY_SIZE(usbhs_pipe_cfg),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct resource usbhs_resources[] = {
|
||||||
|
[0] = {
|
||||||
|
.start = 0xE6890000,
|
||||||
|
.end = 0xE68900e6 - 1,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
[1] = {
|
||||||
|
.start = gic_spi(62),
|
||||||
|
.end = gic_spi(62),
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device usbhs_device = {
|
||||||
|
.name = "renesas_usbhs",
|
||||||
|
.id = -1,
|
||||||
|
.dev = {
|
||||||
|
.dma_mask = NULL,
|
||||||
|
.coherent_dma_mask = 0xffffffff,
|
||||||
|
.platform_data = &usbhs_private.info,
|
||||||
|
},
|
||||||
|
.num_resources = ARRAY_SIZE(usbhs_resources),
|
||||||
|
.resource = usbhs_resources,
|
||||||
|
};
|
||||||
|
|
||||||
/* LCDC */
|
/* LCDC */
|
||||||
static struct fb_videomode kzm_lcdc_mode = {
|
static struct fb_videomode kzm_lcdc_mode = {
|
||||||
.name = "WVGA Panel",
|
.name = "WVGA Panel",
|
||||||
|
@ -166,6 +330,13 @@ static struct platform_device lcdc_device = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Fixed 1.8V regulator to be used by MMCIF */
|
||||||
|
static struct regulator_consumer_supply fixed1v8_power_consumers[] =
|
||||||
|
{
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mmcif.0"),
|
||||||
|
};
|
||||||
|
|
||||||
/* MMCIF */
|
/* MMCIF */
|
||||||
static struct resource sh_mmcif_resources[] = {
|
static struct resource sh_mmcif_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
|
@ -187,6 +358,8 @@ static struct resource sh_mmcif_resources[] = {
|
||||||
static struct sh_mmcif_plat_data sh_mmcif_platdata = {
|
static struct sh_mmcif_plat_data sh_mmcif_platdata = {
|
||||||
.ocr = MMC_VDD_165_195,
|
.ocr = MMC_VDD_165_195,
|
||||||
.caps = MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE,
|
.caps = MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE,
|
||||||
|
.slave_id_tx = SHDMA_SLAVE_MMCIF_TX,
|
||||||
|
.slave_id_rx = SHDMA_SLAVE_MMCIF_RX,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device mmc_device = {
|
static struct platform_device mmc_device = {
|
||||||
|
@ -200,6 +373,15 @@ static struct platform_device mmc_device = {
|
||||||
.resource = sh_mmcif_resources,
|
.resource = sh_mmcif_resources,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Fixed 2.8V regulators to be used by SDHI0 and SDHI2 */
|
||||||
|
static struct regulator_consumer_supply fixed2v8_power_consumers[] =
|
||||||
|
{
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.2"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.2"),
|
||||||
|
};
|
||||||
|
|
||||||
/* SDHI */
|
/* SDHI */
|
||||||
static struct sh_mobile_sdhi_info sdhi0_info = {
|
static struct sh_mobile_sdhi_info sdhi0_info = {
|
||||||
.tmio_flags = TMIO_MMC_HAS_IDLE_WAIT,
|
.tmio_flags = TMIO_MMC_HAS_IDLE_WAIT,
|
||||||
|
@ -240,6 +422,50 @@ static struct platform_device sdhi0_device = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Micro SD */
|
||||||
|
static struct sh_mobile_sdhi_info sdhi2_info = {
|
||||||
|
.tmio_flags = TMIO_MMC_HAS_IDLE_WAIT |
|
||||||
|
TMIO_MMC_USE_GPIO_CD |
|
||||||
|
TMIO_MMC_WRPROTECT_DISABLE,
|
||||||
|
.tmio_caps = MMC_CAP_SD_HIGHSPEED,
|
||||||
|
.tmio_ocr_mask = MMC_VDD_27_28 | MMC_VDD_28_29,
|
||||||
|
.cd_gpio = GPIO_PORT13,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct resource sdhi2_resources[] = {
|
||||||
|
[0] = {
|
||||||
|
.name = "SDHI2",
|
||||||
|
.start = 0xee140000,
|
||||||
|
.end = 0xee1400ff,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
[1] = {
|
||||||
|
.name = SH_MOBILE_SDHI_IRQ_CARD_DETECT,
|
||||||
|
.start = gic_spi(103),
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
.name = SH_MOBILE_SDHI_IRQ_SDCARD,
|
||||||
|
.start = gic_spi(104),
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
|
.name = SH_MOBILE_SDHI_IRQ_SDIO,
|
||||||
|
.start = gic_spi(105),
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device sdhi2_device = {
|
||||||
|
.name = "sh_mobile_sdhi",
|
||||||
|
.id = 2,
|
||||||
|
.num_resources = ARRAY_SIZE(sdhi2_resources),
|
||||||
|
.resource = sdhi2_resources,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &sdhi2_info,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
/* KEY */
|
/* KEY */
|
||||||
#define GPIO_KEY(c, g, d) { .code = c, .gpio = g, .desc = d, .active_low = 1 }
|
#define GPIO_KEY(c, g, d) { .code = c, .gpio = g, .desc = d, .active_low = 1 }
|
||||||
|
|
||||||
|
@ -267,11 +493,74 @@ static struct platform_device gpio_keys_device = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* FSI-AK4648 */
|
||||||
|
static struct sh_fsi_platform_info fsi_info = {
|
||||||
|
.port_a = {
|
||||||
|
.tx_id = SHDMA_SLAVE_FSI2A_TX,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct resource fsi_resources[] = {
|
||||||
|
[0] = {
|
||||||
|
.name = "FSI",
|
||||||
|
.start = 0xEC230000,
|
||||||
|
.end = 0xEC230400 - 1,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
[1] = {
|
||||||
|
.start = gic_spi(146),
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device fsi_device = {
|
||||||
|
.name = "sh_fsi2",
|
||||||
|
.id = -1,
|
||||||
|
.num_resources = ARRAY_SIZE(fsi_resources),
|
||||||
|
.resource = fsi_resources,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &fsi_info,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct asoc_simple_dai_init_info fsi2_ak4648_init_info = {
|
||||||
|
.fmt = SND_SOC_DAIFMT_LEFT_J,
|
||||||
|
.codec_daifmt = SND_SOC_DAIFMT_CBM_CFM,
|
||||||
|
.cpu_daifmt = SND_SOC_DAIFMT_CBS_CFS,
|
||||||
|
.sysclk = 11289600,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct asoc_simple_card_info fsi2_ak4648_info = {
|
||||||
|
.name = "AK4648",
|
||||||
|
.card = "FSI2A-AK4648",
|
||||||
|
.cpu_dai = "fsia-dai",
|
||||||
|
.codec = "ak4642-codec.0-0012",
|
||||||
|
.platform = "sh_fsi2",
|
||||||
|
.codec_dai = "ak4642-hifi",
|
||||||
|
.init = &fsi2_ak4648_init_info,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device fsi_ak4648_device = {
|
||||||
|
.name = "asoc-simple-card",
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &fsi2_ak4648_info,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
/* I2C */
|
/* I2C */
|
||||||
static struct pcf857x_platform_data pcf8575_pdata = {
|
static struct pcf857x_platform_data pcf8575_pdata = {
|
||||||
.gpio_base = GPIO_PCF8575_BASE,
|
.gpio_base = GPIO_PCF8575_BASE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct i2c_board_info i2c0_devices[] = {
|
||||||
|
{
|
||||||
|
I2C_BOARD_INFO("ak4648", 0x12),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
I2C_BOARD_INFO("r2025sd", 0x32),
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
static struct i2c_board_info i2c1_devices[] = {
|
static struct i2c_board_info i2c1_devices[] = {
|
||||||
{
|
{
|
||||||
I2C_BOARD_INFO("st1232-ts", 0x55),
|
I2C_BOARD_INFO("st1232-ts", 0x55),
|
||||||
|
@ -289,10 +578,14 @@ static struct i2c_board_info i2c3_devices[] = {
|
||||||
static struct platform_device *kzm_devices[] __initdata = {
|
static struct platform_device *kzm_devices[] __initdata = {
|
||||||
&smsc_device,
|
&smsc_device,
|
||||||
&usb_host_device,
|
&usb_host_device,
|
||||||
|
&usbhs_device,
|
||||||
&lcdc_device,
|
&lcdc_device,
|
||||||
&mmc_device,
|
&mmc_device,
|
||||||
&sdhi0_device,
|
&sdhi0_device,
|
||||||
|
&sdhi2_device,
|
||||||
&gpio_keys_device,
|
&gpio_keys_device,
|
||||||
|
&fsi_device,
|
||||||
|
&fsi_ak4648_device,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -350,6 +643,12 @@ device_initcall(as3711_enable_lcdc_backlight);
|
||||||
|
|
||||||
static void __init kzm_init(void)
|
static void __init kzm_init(void)
|
||||||
{
|
{
|
||||||
|
regulator_register_always_on(0, "fixed-1.8V", fixed1v8_power_consumers,
|
||||||
|
ARRAY_SIZE(fixed1v8_power_consumers), 1800000);
|
||||||
|
regulator_register_always_on(1, "fixed-2.8V", fixed2v8_power_consumers,
|
||||||
|
ARRAY_SIZE(fixed2v8_power_consumers), 2800000);
|
||||||
|
regulator_register_fixed(2, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||||
|
|
||||||
sh73a0_pinmux_init();
|
sh73a0_pinmux_init();
|
||||||
|
|
||||||
/* enable SCIFA4 */
|
/* enable SCIFA4 */
|
||||||
|
@ -427,15 +726,36 @@ static void __init kzm_init(void)
|
||||||
gpio_request(GPIO_PORT15, NULL);
|
gpio_request(GPIO_PORT15, NULL);
|
||||||
gpio_direction_output(GPIO_PORT15, 1); /* power */
|
gpio_direction_output(GPIO_PORT15, 1); /* power */
|
||||||
|
|
||||||
|
/* enable Micro SD */
|
||||||
|
gpio_request(GPIO_FN_SDHID2_0, NULL);
|
||||||
|
gpio_request(GPIO_FN_SDHID2_1, NULL);
|
||||||
|
gpio_request(GPIO_FN_SDHID2_2, NULL);
|
||||||
|
gpio_request(GPIO_FN_SDHID2_3, NULL);
|
||||||
|
gpio_request(GPIO_FN_SDHICMD2, NULL);
|
||||||
|
gpio_request(GPIO_FN_SDHICLK2, NULL);
|
||||||
|
gpio_request(GPIO_PORT14, NULL);
|
||||||
|
gpio_direction_output(GPIO_PORT14, 1); /* power */
|
||||||
|
|
||||||
/* I2C 3 */
|
/* I2C 3 */
|
||||||
gpio_request(GPIO_FN_PORT27_I2C_SCL3, NULL);
|
gpio_request(GPIO_FN_PORT27_I2C_SCL3, NULL);
|
||||||
gpio_request(GPIO_FN_PORT28_I2C_SDA3, NULL);
|
gpio_request(GPIO_FN_PORT28_I2C_SDA3, NULL);
|
||||||
|
|
||||||
|
/* enable FSI2 port A (ak4648) */
|
||||||
|
gpio_request(GPIO_FN_FSIACK, NULL);
|
||||||
|
gpio_request(GPIO_FN_FSIAILR, NULL);
|
||||||
|
gpio_request(GPIO_FN_FSIAIBT, NULL);
|
||||||
|
gpio_request(GPIO_FN_FSIAISLD, NULL);
|
||||||
|
gpio_request(GPIO_FN_FSIAOSLD, NULL);
|
||||||
|
|
||||||
|
/* enable USB */
|
||||||
|
gpio_request(GPIO_FN_VBUS_0, NULL);
|
||||||
|
|
||||||
#ifdef CONFIG_CACHE_L2X0
|
#ifdef CONFIG_CACHE_L2X0
|
||||||
/* Early BRESP enable, Shared attribute override enable, 64K*8way */
|
/* Early BRESP enable, Shared attribute override enable, 64K*8way */
|
||||||
l2x0_init(IOMEM(0xf0100000), 0x40460000, 0x82000fff);
|
l2x0_init(IOMEM(0xf0100000), 0x40460000, 0x82000fff);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
i2c_register_board_info(0, i2c0_devices, ARRAY_SIZE(i2c0_devices));
|
||||||
i2c_register_board_info(1, i2c1_devices, ARRAY_SIZE(i2c1_devices));
|
i2c_register_board_info(1, i2c1_devices, ARRAY_SIZE(i2c1_devices));
|
||||||
i2c_register_board_info(3, i2c3_devices, ARRAY_SIZE(i2c3_devices));
|
i2c_register_board_info(3, i2c3_devices, ARRAY_SIZE(i2c3_devices));
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,8 @@
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/mtd/sh_flctl.h>
|
#include <linux/mtd/sh_flctl.h>
|
||||||
#include <linux/pm_clock.h>
|
#include <linux/pm_clock.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
#include <linux/sh_intc.h>
|
#include <linux/sh_intc.h>
|
||||||
#include <linux/tca6416_keypad.h>
|
#include <linux/tca6416_keypad.h>
|
||||||
|
@ -203,31 +205,32 @@
|
||||||
* amixer set "HPOUTR Mixer DACH" on
|
* amixer set "HPOUTR Mixer DACH" on
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/* Fixed 3.3V and 1.8V regulators to be used by multiple devices */
|
||||||
* FIXME !!
|
static struct regulator_consumer_supply fixed1v8_power_consumers[] =
|
||||||
*
|
|
||||||
* gpio_no_direction
|
|
||||||
* gpio_pull_down
|
|
||||||
* are quick_hack.
|
|
||||||
*
|
|
||||||
* current gpio frame work doesn't have
|
|
||||||
* the method to control only pull up/down/free.
|
|
||||||
* this function should be replaced by correct gpio function
|
|
||||||
*/
|
|
||||||
static void __init gpio_no_direction(u32 addr)
|
|
||||||
{
|
{
|
||||||
__raw_writeb(0x00, addr);
|
/*
|
||||||
}
|
* J22 on mackerel switches mmcif.0 and sdhi.1 between 1.8V and 3.3V
|
||||||
|
* Since we cannot support both voltages, we support the default 1.8V
|
||||||
|
*/
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"),
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mmcif.0"),
|
||||||
|
};
|
||||||
|
|
||||||
static void __init gpio_pull_down(u32 addr)
|
static struct regulator_consumer_supply fixed3v3_power_consumers[] =
|
||||||
{
|
{
|
||||||
u8 data = __raw_readb(addr);
|
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),
|
||||||
|
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.2"),
|
||||||
|
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.2"),
|
||||||
|
};
|
||||||
|
|
||||||
data &= 0x0F;
|
/* Dummy supplies, where voltage doesn't matter */
|
||||||
data |= 0xA0;
|
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||||
|
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||||
__raw_writeb(data, addr);
|
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||||
}
|
};
|
||||||
|
|
||||||
/* MTD */
|
/* MTD */
|
||||||
static struct mtd_partition nor_flash_partitions[] = {
|
static struct mtd_partition nor_flash_partitions[] = {
|
||||||
|
@ -1409,6 +1412,12 @@ static void __init mackerel_init(void)
|
||||||
u32 srcr4;
|
u32 srcr4;
|
||||||
struct clk *clk;
|
struct clk *clk;
|
||||||
|
|
||||||
|
regulator_register_always_on(0, "fixed-1.8V", fixed1v8_power_consumers,
|
||||||
|
ARRAY_SIZE(fixed1v8_power_consumers), 1800000);
|
||||||
|
regulator_register_always_on(1, "fixed-3.3V", fixed3v3_power_consumers,
|
||||||
|
ARRAY_SIZE(fixed3v3_power_consumers), 3300000);
|
||||||
|
regulator_register_fixed(2, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||||
|
|
||||||
/* External clock source */
|
/* External clock source */
|
||||||
clk_set_rate(&sh7372_dv_clki_clk, 27000000);
|
clk_set_rate(&sh7372_dv_clki_clk, 27000000);
|
||||||
|
|
||||||
|
@ -1458,11 +1467,11 @@ static void __init mackerel_init(void)
|
||||||
|
|
||||||
/* USBHS0 */
|
/* USBHS0 */
|
||||||
gpio_request(GPIO_FN_VBUS0_0, NULL);
|
gpio_request(GPIO_FN_VBUS0_0, NULL);
|
||||||
gpio_pull_down(GPIO_PORT168CR); /* VBUS0_0 pull down */
|
gpio_request_pulldown(GPIO_PORT168CR); /* VBUS0_0 pull down */
|
||||||
|
|
||||||
/* USBHS1 */
|
/* USBHS1 */
|
||||||
gpio_request(GPIO_FN_VBUS0_1, NULL);
|
gpio_request(GPIO_FN_VBUS0_1, NULL);
|
||||||
gpio_pull_down(GPIO_PORT167CR); /* VBUS0_1 pull down */
|
gpio_request_pulldown(GPIO_PORT167CR); /* VBUS0_1 pull down */
|
||||||
gpio_request(GPIO_FN_IDIN_1_113, NULL);
|
gpio_request(GPIO_FN_IDIN_1_113, NULL);
|
||||||
|
|
||||||
/* enable FSI2 port A (ak4643) */
|
/* enable FSI2 port A (ak4643) */
|
||||||
|
@ -1475,8 +1484,8 @@ static void __init mackerel_init(void)
|
||||||
|
|
||||||
gpio_request(GPIO_PORT9, NULL);
|
gpio_request(GPIO_PORT9, NULL);
|
||||||
gpio_request(GPIO_PORT10, NULL);
|
gpio_request(GPIO_PORT10, NULL);
|
||||||
gpio_no_direction(GPIO_PORT9CR); /* FSIAOBT needs no direction */
|
gpio_direction_none(GPIO_PORT9CR); /* FSIAOBT needs no direction */
|
||||||
gpio_no_direction(GPIO_PORT10CR); /* FSIAOLR needs no direction */
|
gpio_direction_none(GPIO_PORT10CR); /* FSIAOLR needs no direction */
|
||||||
|
|
||||||
intc_set_priority(IRQ_FSI, 3); /* irq priority FSI(3) > SMSC911X(2) */
|
intc_set_priority(IRQ_FSI, 3); /* irq priority FSI(3) > SMSC911X(2) */
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <mach/r8a7779.h>
|
#include <mach/r8a7779.h>
|
||||||
|
@ -37,6 +39,12 @@
|
||||||
#include <asm/hardware/gic.h>
|
#include <asm/hardware/gic.h>
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
|
|
||||||
|
/* Dummy supplies, where voltage doesn't matter */
|
||||||
|
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||||
|
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||||
|
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||||
|
};
|
||||||
|
|
||||||
/* SMSC LAN89218 */
|
/* SMSC LAN89218 */
|
||||||
static struct resource smsc911x_resources[] = {
|
static struct resource smsc911x_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
|
@ -73,6 +81,8 @@ static struct platform_device *marzen_devices[] __initdata = {
|
||||||
|
|
||||||
static void __init marzen_init(void)
|
static void __init marzen_init(void)
|
||||||
{
|
{
|
||||||
|
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||||
|
|
||||||
r8a7779_pinmux_init();
|
r8a7779_pinmux_init();
|
||||||
|
|
||||||
/* SCIF2 (CN18: DEBUG0) */
|
/* SCIF2 (CN18: DEBUG0) */
|
||||||
|
|
Loading…
Reference in New Issue