mirror of https://gitee.com/openkylin/linux.git
Second Round of Renesas ARM Based SoC Board Updates for v3.15
* r7s72100 (RZ/A1H) based Genmai board - Enable SH ethernet - Add RSPI support * r8a7791 (R-Car M2) based Koelsch board - Add QSPI support - Add I2C support - Pass SH ethernet PHY IRQ * r8a7790 (R-Car H2) based Lager board - Switch QSPI to named IRQs - Add sound support - Add USB0 cable detection workaround - Pass SH ethernet PHY IRQ * r8a7779 (R-Car H1) based Marzen board - Revert conditional selection of SMSC_PHY * r8a7778 (R-Car M1) based Bock-W board - Use wp-gpios instead of WP pin -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.14 (GNU/Linux) iQIcBAABAgAGBQJS/HQDAAoJENfPZGlqN0++cCUQAIApwlelaRXlUK1s0YCkZiuA RRsDrBzjN2BLywoEKJSbGmoL9bayQGW6V434RbmQqw1gEYxLT+qo9FAuCSRtP+1r SNRptXstoEdEiQIZW3zxMtYjL+6bRkgyxZP7nTyrNX5zNdMFnPLIe4Oo+OMsIIGX pcS1OSgcz8hgWf2BaqloK7bRgxX/qq/atc5w530swLqtFKQWji/RNLn9V+o+1Cjn 3iB88a3FDjrvhfXDmXNSZZsxso5ULtezq1rRueYCtGvrALaRokvEKzGjicP5acxK 3kpypn3buE+Nc4S2V9wsgn8fN+j4QIvZ5RD1p6V0v3VSB/zy/8XcHcKH8tzVoD07 o91sXAz0cN+/76woxIBgpLounHwfJGPTf4sXmY+Bq6KqtrZMLQG6UNUZTT8qC0MB zbZohFyTV+VZtEoxOyplYOGrJ8XKdW4mD9kuOyXJ9Xq9244/WMwRhc3SAzdDl7N0 apS8Zer9JE1bjunKtvTCkC9967OQe38bSmF19QCJYiATdObT4j2QPWFh2AgWSk9C dZNTh6x5cIG2ikL3hzLum04H4yQMAs2JYImg4Ltuxo/cXB2NpcplWq/H+anbUWDv H94URpp8VGCjeq+k2brENCUwmaU1R6h60mWJZvqCOCYyW7Flvn1wBpg9dvJ1Q/Ul QQ2gKUXd9PTQldff+sxG =2gNt -----END PGP SIGNATURE----- Merge tag 'renesas-boards2-for-v3.15' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into next/boards Merge "Second Round of Renesas ARM Based SoC Board Updates for v3.15" from Simon Horman: * r7s72100 (RZ/A1H) based Genmai board - Enable SH ethernet - Add RSPI support * r8a7791 (R-Car M2) based Koelsch board - Add QSPI support - Add I2C support - Pass SH ethernet PHY IRQ * r8a7790 (R-Car H2) based Lager board - Switch QSPI to named IRQs - Add sound support - Add USB0 cable detection workaround - Pass SH ethernet PHY IRQ * r8a7779 (R-Car H1) based Marzen board - Revert conditional selection of SMSC_PHY * r8a7778 (R-Car M1) based Bock-W board - Use wp-gpios instead of WP pin * tag 'renesas-boards2-for-v3.15' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas: ARM: shmobile: genmai: Enable r7s72100-ether ARM: shmobile: lager legacy: Switch QSPI to named IRQs ARM: shmobile: koelsch legacy: Add QSPI support ARM: shmobile: genmai legacy: Add RSPI support Revert "ARM: shmobile: marzen: Conditionally select SMSC_PHY" ARM: shmobile: lager: add sound support ARM: shmobile: Lager USB0 cable detection workaround ARM: shmobile: bockw: use wp-gpios instead of WP pin ARM: shmobile: koelsch: Add I2C support ARM: shmobile: Koelsch: pass Ether PHY IRQ ARM: shmobile: Lager: pass Ether PHY IRQ
This commit is contained in:
commit
ff280bceb5
|
@ -17,6 +17,7 @@
|
|||
/dts-v1/;
|
||||
#include "r8a7778.dtsi"
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
/ {
|
||||
model = "bockw";
|
||||
|
@ -84,7 +85,7 @@ mmc_pins: mmc {
|
|||
|
||||
sdhi0_pins: sd0 {
|
||||
renesas,groups = "sdhi0_data4", "sdhi0_ctrl",
|
||||
"sdhi0_cd", "sdhi0_wp";
|
||||
"sdhi0_cd";
|
||||
renesas,function = "sdhi0";
|
||||
};
|
||||
|
||||
|
@ -101,6 +102,7 @@ &sdhi0 {
|
|||
vmmc-supply = <&fixedregulator3v3>;
|
||||
bus-width = <4>;
|
||||
status = "okay";
|
||||
wp-gpios = <&gpio3 18 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
&hspi0 {
|
||||
|
|
|
@ -250,7 +250,6 @@ config MACH_MARZEN
|
|||
depends on ARCH_R8A7779
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
||||
select SMSC_PHY if SMSC911X
|
||||
select USE_OF
|
||||
|
||||
config MACH_MARZEN_REFERENCE
|
||||
|
@ -258,7 +257,6 @@ config MACH_MARZEN_REFERENCE
|
|||
depends on ARCH_R8A7779
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
||||
select SMSC_PHY if SMSC911X
|
||||
select USE_OF
|
||||
---help---
|
||||
Use reference implementation of Marzen board support
|
||||
|
@ -272,6 +270,7 @@ config MACH_LAGER
|
|||
depends on ARCH_R8A7790
|
||||
select USE_OF
|
||||
select MICREL_PHY if SH_ETH
|
||||
select SND_SOC_AK4642 if SND_SIMPLE_CARD
|
||||
|
||||
config MACH_KOELSCH
|
||||
bool "Koelsch board"
|
||||
|
|
|
@ -20,15 +20,79 @@
|
|||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/sh_eth.h>
|
||||
#include <linux/spi/rspi.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/r7s72100.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
||||
/* Ether */
|
||||
static const struct sh_eth_plat_data ether_pdata __initconst = {
|
||||
.phy = 0x00, /* PD60610 */
|
||||
.edmac_endian = EDMAC_LITTLE_ENDIAN,
|
||||
.phy_interface = PHY_INTERFACE_MODE_MII,
|
||||
.no_ether_link = 1
|
||||
};
|
||||
|
||||
static const struct resource ether_resources[] __initconst = {
|
||||
DEFINE_RES_MEM(0xe8203000, 0x800),
|
||||
DEFINE_RES_MEM(0xe8204800, 0x200),
|
||||
DEFINE_RES_IRQ(gic_iid(359)),
|
||||
};
|
||||
|
||||
/* RSPI */
|
||||
#define RSPI_RESOURCE(idx, baseaddr, irq) \
|
||||
static const struct resource rspi##idx##_resources[] __initconst = { \
|
||||
DEFINE_RES_MEM(baseaddr, 0x24), \
|
||||
DEFINE_RES_IRQ_NAMED(irq, "error"), \
|
||||
DEFINE_RES_IRQ_NAMED(irq + 1, "rx"), \
|
||||
DEFINE_RES_IRQ_NAMED(irq + 2, "tx"), \
|
||||
}
|
||||
|
||||
RSPI_RESOURCE(0, 0xe800c800, gic_iid(270));
|
||||
RSPI_RESOURCE(1, 0xe800d000, gic_iid(273));
|
||||
RSPI_RESOURCE(2, 0xe800d800, gic_iid(276));
|
||||
RSPI_RESOURCE(3, 0xe800e000, gic_iid(279));
|
||||
RSPI_RESOURCE(4, 0xe800e800, gic_iid(282));
|
||||
|
||||
static const struct rspi_plat_data rspi_pdata __initconst = {
|
||||
.num_chipselect = 1,
|
||||
};
|
||||
|
||||
#define r7s72100_register_rspi(idx) \
|
||||
platform_device_register_resndata(&platform_bus, "rspi-rz", idx, \
|
||||
rspi##idx##_resources, \
|
||||
ARRAY_SIZE(rspi##idx##_resources), \
|
||||
&rspi_pdata, sizeof(rspi_pdata))
|
||||
|
||||
static const struct spi_board_info spi_info[] __initconst = {
|
||||
{
|
||||
.modalias = "wm8978",
|
||||
.max_speed_hz = 5000000,
|
||||
.bus_num = 4,
|
||||
.chip_select = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static void __init genmai_add_standard_devices(void)
|
||||
{
|
||||
r7s72100_clock_init();
|
||||
r7s72100_add_dt_devices();
|
||||
|
||||
platform_device_register_resndata(&platform_bus, "r7s72100-ether", -1,
|
||||
ether_resources,
|
||||
ARRAY_SIZE(ether_resources),
|
||||
ðer_pdata, sizeof(ether_pdata));
|
||||
|
||||
r7s72100_register_rspi(0);
|
||||
r7s72100_register_rspi(1);
|
||||
r7s72100_register_rspi(2);
|
||||
r7s72100_register_rspi(3);
|
||||
r7s72100_register_rspi(4);
|
||||
spi_register_board_info(spi_info, ARRAY_SIZE(spi_info));
|
||||
}
|
||||
|
||||
static const char * const genmai_boards_compat_dt[] __initconst = {
|
||||
|
|
|
@ -23,14 +23,20 @@
|
|||
#include <linux/gpio.h>
|
||||
#include <linux/gpio_keys.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/pinctrl/machine.h>
|
||||
#include <linux/platform_data/gpio-rcar.h>
|
||||
#include <linux/platform_data/rcar-du.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/sh_eth.h>
|
||||
#include <linux/spi/flash.h>
|
||||
#include <linux/spi/rspi.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/r8a7791.h>
|
||||
|
@ -92,6 +98,7 @@ static void __init koelsch_add_du_device(void)
|
|||
/* Ether */
|
||||
static const struct sh_eth_plat_data ether_pdata __initconst = {
|
||||
.phy = 0x1,
|
||||
.phy_irq = irq_pin(0),
|
||||
.edmac_endian = EDMAC_LITTLE_ENDIAN,
|
||||
.phy_interface = PHY_INTERFACE_MODE_RMII,
|
||||
.ether_link_active_low = 1,
|
||||
|
@ -148,6 +155,55 @@ static const struct gpio_keys_platform_data koelsch_keys_pdata __initconst = {
|
|||
.nbuttons = ARRAY_SIZE(gpio_buttons),
|
||||
};
|
||||
|
||||
/* QSPI */
|
||||
static const struct resource qspi_resources[] __initconst = {
|
||||
DEFINE_RES_MEM(0xe6b10000, 0x1000),
|
||||
DEFINE_RES_IRQ_NAMED(gic_spi(184), "mux"),
|
||||
};
|
||||
|
||||
static const struct rspi_plat_data qspi_pdata __initconst = {
|
||||
.num_chipselect = 1,
|
||||
};
|
||||
|
||||
/* SPI Flash memory (Spansion S25FL512SAGMFIG11 64 MiB) */
|
||||
static struct mtd_partition spi_flash_part[] = {
|
||||
{
|
||||
.name = "loader",
|
||||
.offset = 0x00000000,
|
||||
.size = 512 * 1024,
|
||||
.mask_flags = MTD_WRITEABLE,
|
||||
},
|
||||
{
|
||||
.name = "bootenv",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = 512 * 1024,
|
||||
.mask_flags = MTD_WRITEABLE,
|
||||
},
|
||||
{
|
||||
.name = "data",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct flash_platform_data spi_flash_data = {
|
||||
.name = "m25p80",
|
||||
.parts = spi_flash_part,
|
||||
.nr_parts = ARRAY_SIZE(spi_flash_part),
|
||||
.type = "s25fl512s",
|
||||
};
|
||||
|
||||
static const struct spi_board_info spi_info[] __initconst = {
|
||||
{
|
||||
.modalias = "m25p80",
|
||||
.platform_data = &spi_flash_data,
|
||||
.mode = SPI_MODE_0,
|
||||
.max_speed_hz = 30000000,
|
||||
.bus_num = 0,
|
||||
.chip_select = 0,
|
||||
},
|
||||
};
|
||||
|
||||
/* SATA0 */
|
||||
static const struct resource sata0_resources[] __initconst = {
|
||||
DEFINE_RES_MEM(0xee300000, 0x2000),
|
||||
|
@ -163,6 +219,38 @@ static const struct platform_device_info sata0_info __initconst = {
|
|||
.dma_mask = DMA_BIT_MASK(32),
|
||||
};
|
||||
|
||||
/* I2C */
|
||||
static const struct resource i2c_resources[] __initconst = {
|
||||
/* I2C0 */
|
||||
DEFINE_RES_MEM(0xE6508000, 0x40),
|
||||
DEFINE_RES_IRQ(gic_spi(287)),
|
||||
/* I2C1 */
|
||||
DEFINE_RES_MEM(0xE6518000, 0x40),
|
||||
DEFINE_RES_IRQ(gic_spi(288)),
|
||||
/* I2C2 */
|
||||
DEFINE_RES_MEM(0xE6530000, 0x40),
|
||||
DEFINE_RES_IRQ(gic_spi(286)),
|
||||
/* I2C3 */
|
||||
DEFINE_RES_MEM(0xE6540000, 0x40),
|
||||
DEFINE_RES_IRQ(gic_spi(290)),
|
||||
/* I2C4 */
|
||||
DEFINE_RES_MEM(0xE6520000, 0x40),
|
||||
DEFINE_RES_IRQ(gic_spi(19)),
|
||||
/* I2C5 */
|
||||
DEFINE_RES_MEM(0xE6528000, 0x40),
|
||||
DEFINE_RES_IRQ(gic_spi(20)),
|
||||
};
|
||||
|
||||
static void __init koelsch_add_i2c(unsigned idx)
|
||||
{
|
||||
unsigned res_idx = idx * 2;
|
||||
|
||||
BUG_ON(res_idx >= ARRAY_SIZE(i2c_resources));
|
||||
|
||||
platform_device_register_simple("i2c-rcar_gen2", idx,
|
||||
i2c_resources + res_idx, 2);
|
||||
}
|
||||
|
||||
static const struct pinctrl_map koelsch_pinctrl_map[] = {
|
||||
/* DU */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("rcar-du-r8a7791", "pfc-r8a7791",
|
||||
|
@ -180,12 +268,26 @@ static const struct pinctrl_map koelsch_pinctrl_map[] = {
|
|||
"eth_rmii", "eth"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("r8a7791-ether", "pfc-r8a7791",
|
||||
"intc_irq0", "intc"),
|
||||
/* QSPI */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("qspi.0", "pfc-r8a7791",
|
||||
"qspi_ctrl", "qspi"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("qspi.0", "pfc-r8a7791",
|
||||
"qspi_data4", "qspi"),
|
||||
/* SCIF0 (CN19: DEBUG SERIAL0) */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.6", "pfc-r8a7791",
|
||||
"scif0_data_d", "scif0"),
|
||||
/* SCIF1 (CN20: DEBUG SERIAL1) */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.7", "pfc-r8a7791",
|
||||
"scif1_data_d", "scif1"),
|
||||
/* I2C1 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("i2c-rcar_gen2.1", "pfc-r8a7791",
|
||||
"i2c1_e", "i2c1"),
|
||||
/* I2C2 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("i2c-rcar_gen2.2", "pfc-r8a7791",
|
||||
"i2c2", "i2c2"),
|
||||
/* I2C4 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("i2c-rcar_gen2.4", "pfc-r8a7791",
|
||||
"i2c4_c", "i2c4"),
|
||||
};
|
||||
|
||||
static void __init koelsch_add_standard_devices(void)
|
||||
|
@ -205,10 +307,20 @@ static void __init koelsch_add_standard_devices(void)
|
|||
platform_device_register_data(&platform_bus, "gpio-keys", -1,
|
||||
&koelsch_keys_pdata,
|
||||
sizeof(koelsch_keys_pdata));
|
||||
platform_device_register_resndata(&platform_bus, "qspi", 0,
|
||||
qspi_resources,
|
||||
ARRAY_SIZE(qspi_resources),
|
||||
&qspi_pdata, sizeof(qspi_pdata));
|
||||
spi_register_board_info(spi_info, ARRAY_SIZE(spi_info));
|
||||
|
||||
koelsch_add_du_device();
|
||||
|
||||
platform_device_register_full(&sata0_info);
|
||||
|
||||
koelsch_add_i2c(1);
|
||||
koelsch_add_i2c(2);
|
||||
koelsch_add_i2c(4);
|
||||
koelsch_add_i2c(5);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -232,6 +344,8 @@ static void __init koelsch_init(void)
|
|||
{
|
||||
koelsch_add_standard_devices();
|
||||
|
||||
irq_set_irq_type(irq_pin(0), IRQ_TYPE_LEVEL_LOW);
|
||||
|
||||
if (IS_ENABLED(CONFIG_PHYLIB))
|
||||
phy_register_fixup_for_id("r8a7791-ether-ff:01",
|
||||
koelsch_ksz8041_fixup);
|
||||
|
|
|
@ -20,8 +20,10 @@
|
|||
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio_keys.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/mmc/host.h>
|
||||
|
@ -51,6 +53,20 @@
|
|||
#include <linux/spi/flash.h>
|
||||
#include <linux/spi/rspi.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <sound/rcar_snd.h>
|
||||
#include <sound/simple_card.h>
|
||||
|
||||
/*
|
||||
* SSI-AK4643
|
||||
*
|
||||
* SW1: 1: AK4643
|
||||
* 2: CN22
|
||||
* 3: ADV7511
|
||||
*
|
||||
* this command is required when playback.
|
||||
*
|
||||
* # amixer set "LINEOUT Mixer DACL" on
|
||||
*/
|
||||
|
||||
/* DU */
|
||||
static struct rcar_du_encoder_data lager_du_encoders[] = {
|
||||
|
@ -233,6 +249,7 @@ static const struct resource mmcif1_resources[] __initconst = {
|
|||
/* Ether */
|
||||
static const struct sh_eth_plat_data ether_pdata __initconst = {
|
||||
.phy = 0x1,
|
||||
.phy_irq = irq_pin(0),
|
||||
.edmac_endian = EDMAC_LITTLE_ENDIAN,
|
||||
.phy_interface = PHY_INTERFACE_MODE_RMII,
|
||||
.ether_link_active_low = 1,
|
||||
|
@ -293,7 +310,7 @@ static const struct spi_board_info spi_info[] __initconst = {
|
|||
/* QSPI resource */
|
||||
static const struct resource qspi_resources[] __initconst = {
|
||||
DEFINE_RES_MEM(0xe6b10000, 0x1000),
|
||||
DEFINE_RES_IRQ(gic_spi(184)),
|
||||
DEFINE_RES_IRQ_NAMED(gic_spi(184), "mux"),
|
||||
};
|
||||
|
||||
/* VIN */
|
||||
|
@ -406,13 +423,30 @@ static int usbhs_hardware_init(struct platform_device *pdev)
|
|||
{
|
||||
struct usbhs_private *priv = usbhs_get_priv(pdev);
|
||||
struct usb_phy *phy;
|
||||
int ret;
|
||||
|
||||
/* USB0 Function - use PWEN as GPIO input to detect DIP Switch SW5
|
||||
* setting to avoid VBUS short circuit due to wrong cable.
|
||||
* PWEN should be pulled up high if USB Function is selected by SW5
|
||||
*/
|
||||
gpio_request_one(RCAR_GP_PIN(5, 18), GPIOF_IN, NULL); /* USB0_PWEN */
|
||||
if (!gpio_get_value(RCAR_GP_PIN(5, 18))) {
|
||||
pr_warn("Error: USB Function not selected - check SW5 + SW6\n");
|
||||
ret = -ENOTSUPP;
|
||||
goto error;
|
||||
}
|
||||
|
||||
phy = usb_get_phy_dev(&pdev->dev, 0);
|
||||
if (IS_ERR(phy))
|
||||
return PTR_ERR(phy);
|
||||
if (IS_ERR(phy)) {
|
||||
ret = PTR_ERR(phy);
|
||||
goto error;
|
||||
}
|
||||
|
||||
priv->phy = phy;
|
||||
return 0;
|
||||
error:
|
||||
gpio_free(RCAR_GP_PIN(5, 18));
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int usbhs_hardware_exit(struct platform_device *pdev)
|
||||
|
@ -424,6 +458,8 @@ static int usbhs_hardware_exit(struct platform_device *pdev)
|
|||
|
||||
usb_put_phy(priv->phy);
|
||||
priv->phy = NULL;
|
||||
|
||||
gpio_free(RCAR_GP_PIN(5, 18));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -488,6 +524,77 @@ static const struct resource usbhs_phy_resources[] __initconst = {
|
|||
DEFINE_RES_MEM(0xe6590100, 0x100),
|
||||
};
|
||||
|
||||
/* I2C */
|
||||
static struct i2c_board_info i2c2_devices[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("ak4643", 0x12),
|
||||
}
|
||||
};
|
||||
|
||||
/* Sound */
|
||||
static struct resource rsnd_resources[] __initdata = {
|
||||
[RSND_GEN2_SCU] = DEFINE_RES_MEM(0xec500000, 0x1000),
|
||||
[RSND_GEN2_ADG] = DEFINE_RES_MEM(0xec5a0000, 0x100),
|
||||
[RSND_GEN2_SSIU] = DEFINE_RES_MEM(0xec540000, 0x1000),
|
||||
[RSND_GEN2_SSI] = DEFINE_RES_MEM(0xec541000, 0x1280),
|
||||
};
|
||||
|
||||
static struct rsnd_ssi_platform_info rsnd_ssi[] = {
|
||||
RSND_SSI_SET(0, 0, gic_spi(370), RSND_SSI_PLAY),
|
||||
RSND_SSI_SET(0, 0, gic_spi(371), RSND_SSI_CLK_PIN_SHARE),
|
||||
};
|
||||
|
||||
static struct rsnd_scu_platform_info rsnd_scu[2] = {
|
||||
/* no member at this point */
|
||||
};
|
||||
|
||||
static struct rcar_snd_info rsnd_info = {
|
||||
.flags = RSND_GEN2,
|
||||
.ssi_info = rsnd_ssi,
|
||||
.ssi_info_nr = ARRAY_SIZE(rsnd_ssi),
|
||||
.scu_info = rsnd_scu,
|
||||
.scu_info_nr = ARRAY_SIZE(rsnd_scu),
|
||||
};
|
||||
|
||||
static struct asoc_simple_card_info rsnd_card_info = {
|
||||
.name = "AK4643",
|
||||
.card = "SSI01-AK4643",
|
||||
.codec = "ak4642-codec.2-0012",
|
||||
.platform = "rcar_sound",
|
||||
.daifmt = SND_SOC_DAIFMT_LEFT_J,
|
||||
.cpu_dai = {
|
||||
.name = "rcar_sound",
|
||||
.fmt = SND_SOC_DAIFMT_CBS_CFS,
|
||||
},
|
||||
.codec_dai = {
|
||||
.name = "ak4642-hifi",
|
||||
.fmt = SND_SOC_DAIFMT_CBM_CFM,
|
||||
.sysclk = 11289600,
|
||||
},
|
||||
};
|
||||
|
||||
static void __init lager_add_rsnd_device(void)
|
||||
{
|
||||
struct platform_device_info cardinfo = {
|
||||
.parent = &platform_bus,
|
||||
.name = "asoc-simple-card",
|
||||
.id = -1,
|
||||
.data = &rsnd_card_info,
|
||||
.size_data = sizeof(struct asoc_simple_card_info),
|
||||
.dma_mask = DMA_BIT_MASK(32),
|
||||
};
|
||||
|
||||
i2c_register_board_info(2, i2c2_devices,
|
||||
ARRAY_SIZE(i2c2_devices));
|
||||
|
||||
platform_device_register_resndata(
|
||||
&platform_bus, "rcar_sound", -1,
|
||||
rsnd_resources, ARRAY_SIZE(rsnd_resources),
|
||||
&rsnd_info, sizeof(rsnd_info));
|
||||
|
||||
platform_device_register_full(&cardinfo);
|
||||
}
|
||||
|
||||
static const struct pinctrl_map lager_pinctrl_map[] = {
|
||||
/* DU (CN10: ARGB0, CN13: LVDS) */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("rcar-du-r8a7790", "pfc-r8a7790",
|
||||
|
@ -496,12 +603,24 @@ static const struct pinctrl_map lager_pinctrl_map[] = {
|
|||
"du_sync_1", "du"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("rcar-du-r8a7790", "pfc-r8a7790",
|
||||
"du_clk_out_0", "du"),
|
||||
/* I2C2 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("i2c-rcar.2", "pfc-r8a7790",
|
||||
"i2c2", "i2c2"),
|
||||
/* SCIF0 (CN19: DEBUG SERIAL0) */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.6", "pfc-r8a7790",
|
||||
"scif0_data", "scif0"),
|
||||
/* SCIF1 (CN20: DEBUG SERIAL1) */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.7", "pfc-r8a7790",
|
||||
"scif1_data", "scif1"),
|
||||
/* SSI (CN17: sound) */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7790",
|
||||
"ssi0129_ctrl", "ssi"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7790",
|
||||
"ssi0_data", "ssi"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7790",
|
||||
"ssi1_data", "ssi"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7790",
|
||||
"audio_clk_a", "audio_clk"),
|
||||
/* MMCIF1 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.1", "pfc-r8a7790",
|
||||
"mmc1_data8", "mmc1"),
|
||||
|
@ -534,7 +653,7 @@ static const struct pinctrl_map lager_pinctrl_map[] = {
|
|||
"vin1_clk", "vin1"),
|
||||
/* USB0 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs", "pfc-r8a7790",
|
||||
"usb0", "usb0"),
|
||||
"usb0_ovc_vbus", "usb0"),
|
||||
};
|
||||
|
||||
static void __init lager_add_standard_devices(void)
|
||||
|
@ -595,6 +714,8 @@ static void __init lager_add_standard_devices(void)
|
|||
&usbhs_phy_pdata,
|
||||
sizeof(usbhs_phy_pdata));
|
||||
lager_register_usbhs();
|
||||
|
||||
lager_add_rsnd_device();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -618,6 +739,8 @@ static void __init lager_init(void)
|
|||
{
|
||||
lager_add_standard_devices();
|
||||
|
||||
irq_set_irq_type(irq_pin(0), IRQ_TYPE_LEVEL_LOW);
|
||||
|
||||
if (IS_ENABLED(CONFIG_PHYLIB))
|
||||
phy_register_fixup_for_id("r8a7790-ether-ff:01",
|
||||
lager_ksz8041_fixup);
|
||||
|
|
Loading…
Reference in New Issue