ARM: mach-shmobile: ap4evb: Add FSI2 support
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
parent
69bf6f451f
commit
cb9215e1fa
|
@ -32,11 +32,15 @@
|
||||||
#include <linux/i2c/tsc2007.h>
|
#include <linux/i2c/tsc2007.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
|
#include <linux/sh_intc.h>
|
||||||
|
#include <linux/sh_clk.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <linux/input/sh_keysc.h>
|
#include <linux/input/sh_keysc.h>
|
||||||
#include <linux/usb/r8a66597.h>
|
#include <linux/usb/r8a66597.h>
|
||||||
|
|
||||||
|
#include <sound/sh_fsi.h>
|
||||||
|
|
||||||
#include <video/sh_mobile_lcdc.h>
|
#include <video/sh_mobile_lcdc.h>
|
||||||
#include <video/sh_mipi_dsi.h>
|
#include <video/sh_mipi_dsi.h>
|
||||||
|
|
||||||
|
@ -113,6 +117,13 @@
|
||||||
* S39: bit2: off
|
* S39: bit2: off
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FSI/FSMI
|
||||||
|
*
|
||||||
|
* SW41 : ON : SH-Mobile AP4 Audio Mode
|
||||||
|
* : OFF : Bluetooth Audio Mode
|
||||||
|
*/
|
||||||
|
|
||||||
/* MTD */
|
/* MTD */
|
||||||
static struct mtd_partition nor_flash_partitions[] = {
|
static struct mtd_partition nor_flash_partitions[] = {
|
||||||
{
|
{
|
||||||
|
@ -373,6 +384,60 @@ static struct platform_device mipidsi0_device = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* FSI */
|
||||||
|
#define IRQ_FSI evt2irq(0x1840)
|
||||||
|
#define FSIACKCR 0xE6150018
|
||||||
|
static void fsiackcr_init(struct clk *clk)
|
||||||
|
{
|
||||||
|
u32 status = __raw_readl(clk->enable_reg);
|
||||||
|
|
||||||
|
/* use external clock */
|
||||||
|
status &= ~0x000000ff;
|
||||||
|
status |= 0x00000080;
|
||||||
|
__raw_writel(status, clk->enable_reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct clk_ops fsiackcr_clk_ops = {
|
||||||
|
.init = fsiackcr_init,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct clk fsiackcr_clk = {
|
||||||
|
.ops = &fsiackcr_clk_ops,
|
||||||
|
.enable_reg = (void __iomem *)FSIACKCR,
|
||||||
|
.rate = 0, /* unknown */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct sh_fsi_platform_info fsi_info = {
|
||||||
|
.porta_flags = SH_FSI_BRS_INV |
|
||||||
|
SH_FSI_OUT_SLAVE_MODE |
|
||||||
|
SH_FSI_IN_SLAVE_MODE |
|
||||||
|
SH_FSI_OFMT(PCM) |
|
||||||
|
SH_FSI_IFMT(PCM),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct resource fsi_resources[] = {
|
||||||
|
[0] = {
|
||||||
|
.name = "FSI",
|
||||||
|
.start = 0xFE3C0000,
|
||||||
|
.end = 0xFE3C0400 - 1,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
[1] = {
|
||||||
|
.start = IRQ_FSI,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device fsi_device = {
|
||||||
|
.name = "sh_fsi2",
|
||||||
|
.id = 0,
|
||||||
|
.num_resources = ARRAY_SIZE(fsi_resources),
|
||||||
|
.resource = fsi_resources,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &fsi_info,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
static struct platform_device *ap4evb_devices[] __initdata = {
|
static struct platform_device *ap4evb_devices[] __initdata = {
|
||||||
&nor_flash_device,
|
&nor_flash_device,
|
||||||
&smc911x_device,
|
&smc911x_device,
|
||||||
|
@ -381,6 +446,7 @@ static struct platform_device *ap4evb_devices[] __initdata = {
|
||||||
&usb1_host_device,
|
&usb1_host_device,
|
||||||
&lcdc_device,
|
&lcdc_device,
|
||||||
&mipidsi0_device,
|
&mipidsi0_device,
|
||||||
|
&fsi_device,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* TouchScreen (Needs SW3 set to OFF) */
|
/* TouchScreen (Needs SW3 set to OFF) */
|
||||||
|
@ -391,6 +457,12 @@ struct tsc2007_platform_data tsc2007_info = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* I2C */
|
/* I2C */
|
||||||
|
static struct i2c_board_info i2c0_devices[] = {
|
||||||
|
{
|
||||||
|
I2C_BOARD_INFO("ak4643", 0x13),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
static struct i2c_board_info i2c1_devices[] = {
|
static struct i2c_board_info i2c1_devices[] = {
|
||||||
{
|
{
|
||||||
I2C_BOARD_INFO("r2025sd", 0x32),
|
I2C_BOARD_INFO("r2025sd", 0x32),
|
||||||
|
@ -463,8 +535,27 @@ eclkdsitxget:
|
||||||
|
|
||||||
device_initcall(ap4evb_init_display_clk);
|
device_initcall(ap4evb_init_display_clk);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FIXME !!
|
||||||
|
*
|
||||||
|
* gpio_no_direction 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_no_direction(u32 addr)
|
||||||
|
{
|
||||||
|
__raw_writeb(0x00, addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GPIO_PORT9CR 0xE6051009
|
||||||
|
#define GPIO_PORT10CR 0xE605100A
|
||||||
|
|
||||||
static void __init ap4evb_init(void)
|
static void __init ap4evb_init(void)
|
||||||
{
|
{
|
||||||
|
struct clk *clk;
|
||||||
|
|
||||||
sh7372_pinmux_init();
|
sh7372_pinmux_init();
|
||||||
|
|
||||||
/* enable SCIFA0 */
|
/* enable SCIFA0 */
|
||||||
|
@ -529,9 +620,6 @@ static void __init ap4evb_init(void)
|
||||||
gpio_request(GPIO_FN_IRQ28_123, NULL);
|
gpio_request(GPIO_FN_IRQ28_123, NULL);
|
||||||
set_irq_type(IRQ28, IRQ_TYPE_LEVEL_LOW);
|
set_irq_type(IRQ28, IRQ_TYPE_LEVEL_LOW);
|
||||||
|
|
||||||
i2c_register_board_info(1, i2c1_devices,
|
|
||||||
ARRAY_SIZE(i2c1_devices));
|
|
||||||
|
|
||||||
/* USB enable */
|
/* USB enable */
|
||||||
gpio_request(GPIO_FN_VBUS0_1, NULL);
|
gpio_request(GPIO_FN_VBUS0_1, NULL);
|
||||||
gpio_request(GPIO_FN_IDIN_1_18, NULL);
|
gpio_request(GPIO_FN_IDIN_1_18, NULL);
|
||||||
|
@ -543,6 +631,47 @@ static void __init ap4evb_init(void)
|
||||||
/* setup USB phy */
|
/* setup USB phy */
|
||||||
__raw_writew(0x8a0a, 0xE6058130); /* USBCR2 */
|
__raw_writew(0x8a0a, 0xE6058130); /* USBCR2 */
|
||||||
|
|
||||||
|
/* enable FSI2 */
|
||||||
|
gpio_request(GPIO_FN_FSIAIBT, NULL);
|
||||||
|
gpio_request(GPIO_FN_FSIAILR, NULL);
|
||||||
|
gpio_request(GPIO_FN_FSIAISLD, NULL);
|
||||||
|
gpio_request(GPIO_FN_FSIAOSLD, NULL);
|
||||||
|
gpio_request(GPIO_PORT161, NULL);
|
||||||
|
gpio_direction_output(GPIO_PORT161, 0); /* slave */
|
||||||
|
|
||||||
|
gpio_request(GPIO_PORT9, NULL);
|
||||||
|
gpio_request(GPIO_PORT10, NULL);
|
||||||
|
gpio_no_direction(GPIO_PORT9CR); /* FSIAOBT needs no direction */
|
||||||
|
gpio_no_direction(GPIO_PORT10CR); /* FSIAOLR needs no direction */
|
||||||
|
|
||||||
|
/* set SPU2 clock to 119.6 MHz */
|
||||||
|
clk = clk_get(NULL, "spu_clk");
|
||||||
|
if (!IS_ERR_VALUE(clk)) {
|
||||||
|
clk_set_rate(clk, clk_round_rate(clk, 119600000));
|
||||||
|
clk_put(clk);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* change parent of FSI A */
|
||||||
|
clk = clk_get(NULL, "fsia_clk");
|
||||||
|
if (!IS_ERR_VALUE(clk)) {
|
||||||
|
clk_register(&fsiackcr_clk);
|
||||||
|
clk_set_parent(clk, &fsiackcr_clk);
|
||||||
|
clk_put(clk);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* set irq priority, to avoid sound chopping
|
||||||
|
* when NFS rootfs is used
|
||||||
|
* FSI(3) > SMSC911X(2)
|
||||||
|
*/
|
||||||
|
intc_set_priority(IRQ_FSI, 3);
|
||||||
|
|
||||||
|
i2c_register_board_info(0, i2c0_devices,
|
||||||
|
ARRAY_SIZE(i2c0_devices));
|
||||||
|
|
||||||
|
i2c_register_board_info(1, i2c1_devices,
|
||||||
|
ARRAY_SIZE(i2c1_devices));
|
||||||
|
|
||||||
sh7372_add_standard_devices();
|
sh7372_add_standard_devices();
|
||||||
|
|
||||||
platform_add_devices(ap4evb_devices, ARRAY_SIZE(ap4evb_devices));
|
platform_add_devices(ap4evb_devices, ARRAY_SIZE(ap4evb_devices));
|
||||||
|
|
|
@ -246,7 +246,7 @@ enum { MSTP001,
|
||||||
MSTP106, MSTP101, MSTP100,
|
MSTP106, MSTP101, MSTP100,
|
||||||
MSTP223,
|
MSTP223,
|
||||||
MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200,
|
MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200,
|
||||||
MSTP329, MSTP323, MSTP322, MSTP314, MSTP313,
|
MSTP329, MSTP328, MSTP323, MSTP322, MSTP314, MSTP313,
|
||||||
MSTP415, MSTP410, MSTP411, MSTP406, MSTP403,
|
MSTP415, MSTP410, MSTP411, MSTP406, MSTP403,
|
||||||
MSTP_NR };
|
MSTP_NR };
|
||||||
|
|
||||||
|
@ -274,6 +274,7 @@ static struct clk mstp_clks[MSTP_NR] = {
|
||||||
[MSTP201] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 1, 0), /* SCIFA3 */
|
[MSTP201] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 1, 0), /* SCIFA3 */
|
||||||
[MSTP200] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 0, 0), /* SCIFA4 */
|
[MSTP200] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 0, 0), /* SCIFA4 */
|
||||||
[MSTP329] = MSTP(&r_clk, SMSTPCR3, 29, 0), /* CMT10 */
|
[MSTP329] = MSTP(&r_clk, SMSTPCR3, 29, 0), /* CMT10 */
|
||||||
|
[MSTP328] = MSTP(&div6_clks[DIV6_SPU], SMSTPCR3, 28, CLK_ENABLE_ON_INIT), /* FSIA */
|
||||||
[MSTP323] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR3, 23, 0), /* IIC1 */
|
[MSTP323] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR3, 23, 0), /* IIC1 */
|
||||||
[MSTP322] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR3, 22, 0), /* USB0 */
|
[MSTP322] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR3, 22, 0), /* USB0 */
|
||||||
[MSTP314] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 14, 0), /* SDHI0 */
|
[MSTP314] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 14, 0), /* SDHI0 */
|
||||||
|
@ -356,6 +357,7 @@ static struct clk_lookup lookups[] = {
|
||||||
CLKDEV_DEV_ID("sh-sci.3", &mstp_clks[MSTP201]), /* SCIFA3 */
|
CLKDEV_DEV_ID("sh-sci.3", &mstp_clks[MSTP201]), /* SCIFA3 */
|
||||||
CLKDEV_DEV_ID("sh-sci.4", &mstp_clks[MSTP200]), /* SCIFA4 */
|
CLKDEV_DEV_ID("sh-sci.4", &mstp_clks[MSTP200]), /* SCIFA4 */
|
||||||
CLKDEV_CON_ID("cmt1", &mstp_clks[MSTP329]), /* CMT10 */
|
CLKDEV_CON_ID("cmt1", &mstp_clks[MSTP329]), /* CMT10 */
|
||||||
|
CLKDEV_DEV_ID("sh_fsi", &mstp_clks[MSTP328]), /* FSI */
|
||||||
CLKDEV_DEV_ID("i2c-sh_mobile.1", &mstp_clks[MSTP323]), /* IIC1 */
|
CLKDEV_DEV_ID("i2c-sh_mobile.1", &mstp_clks[MSTP323]), /* IIC1 */
|
||||||
CLKDEV_DEV_ID("r8a66597_hcd.0", &mstp_clks[MSTP323]), /* USB0 */
|
CLKDEV_DEV_ID("r8a66597_hcd.0", &mstp_clks[MSTP323]), /* USB0 */
|
||||||
CLKDEV_DEV_ID("r8a66597_udc.0", &mstp_clks[MSTP323]), /* USB0 */
|
CLKDEV_DEV_ID("r8a66597_udc.0", &mstp_clks[MSTP323]), /* USB0 */
|
||||||
|
|
Loading…
Reference in New Issue