Conflicts: arch/arm/mach-shmobile/setup-r8a7778.c This is a dependency for the Renesas sh-sci updates.
Unified · Split
| @@ -26,6 +26,7 @@ · 25 unmodified lines | ||
| 26 | 26 | #include <linux/platform_device.h> |
| 27 | 27 | #include <linux/regulator/fixed.h> |
| 28 | 28 | #include <linux/regulator/machine.h> |
| 29 | +#include <linux/sh_clk.h> | |
| 29 | 30 | #include <linux/smsc911x.h> |
| 30 | 31 | #include <mach/common.h> |
| 31 | 32 | #include <mach/irqs.h> |
| @@ -65,7 +66,21 @@ static const struct pinctrl_map ape6evm_pinctrl_map[] = { · 33 unmodified lines | ||
| 65 | 66 | |
| 66 | 67 | static void __init ape6evm_add_standard_devices(void) |
| 67 | 68 | { |
| 69 | + | |
| 70 | + struct clk *parent; | |
| 71 | + struct clk *mp; | |
| 72 | + | |
| 68 | 73 | r8a73a4_clock_init(); |
| 74 | + | |
| 75 | + /* MP clock parent = extal2 */ | |
| 76 | + parent = clk_get(NULL, "extal2"); | |
| 77 | + mp = clk_get(NULL, "mp"); | |
| 78 | + BUG_ON(IS_ERR(parent) || IS_ERR(mp)); | |
| 79 | + | |
| 80 | + clk_set_parent(mp, parent); | |
| 81 | + clk_put(parent); | |
| 82 | + clk_put(mp); | |
| 83 | + | |
| 69 | 84 | pinctrl_register_mappings(ape6evm_pinctrl_map, |
| 70 | 85 | ARRAY_SIZE(ape6evm_pinctrl_map)); |
| 71 | 86 | r8a73a4_pinmux_init(); |
| @@ -18,14 +18,52 @@ · 17 unmodified lines | ||
| 18 | 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| 19 | 19 | */ |
| 20 | 20 | |
| 21 | +#include <linux/mfd/tmio.h> | |
| 22 | +#include <linux/mmc/host.h> | |
| 23 | +#include <linux/mtd/partitions.h> | |
| 21 | 24 | #include <linux/pinctrl/machine.h> |
| 22 | 25 | #include <linux/platform_device.h> |
| 26 | +#include <linux/regulator/fixed.h> | |
| 27 | +#include <linux/regulator/machine.h> | |
| 23 | 28 | #include <linux/smsc911x.h> |
| 29 | +#include <linux/spi/spi.h> | |
| 30 | +#include <linux/spi/flash.h> | |
| 24 | 31 | #include <mach/common.h> |
| 25 | 32 | #include <mach/irqs.h> |
| 26 | 33 | #include <mach/r8a7778.h> |
| 27 | 34 | #include <asm/mach/arch.h> |
| 28 | 35 | |
| 36 | +/* | |
| 37 | + * CN9(Upper side) SCIF/RCAN selection | |
| 38 | + * | |
| 39 | + * 1,4 3,6 | |
| 40 | + * SW40 SCIF RCAN | |
| 41 | + * SW41 SCIF RCAN | |
| 42 | + */ | |
| 43 | + | |
| 44 | +/* | |
| 45 | + * MMC (CN26) pin | |
| 46 | + * | |
| 47 | + * SW6 (D2) 3 pin | |
| 48 | + * SW7 (D5) ON | |
| 49 | + * SW8 (D3) 3 pin | |
| 50 | + * SW10 (D4) 1 pin | |
| 51 | + * SW12 (CLK) 1 pin | |
| 52 | + * SW13 (D6) 3 pin | |
| 53 | + * SW14 (CMD) ON | |
| 54 | + * SW15 (D6) 1 pin | |
| 55 | + * SW16 (D0) ON | |
| 56 | + * SW17 (D1) ON | |
| 57 | + * SW18 (D7) 3 pin | |
| 58 | + * SW19 (MMC) 1 pin | |
| 59 | + */ | |
| 60 | + | |
| 61 | +/* Dummy supplies, where voltage doesn't matter */ | |
| 62 | +static struct regulator_consumer_supply dummy_supplies[] = { | |
| 63 | + REGULATOR_SUPPLY("vddvario", "smsc911x"), | |
| 64 | + REGULATOR_SUPPLY("vdd33a", "smsc911x"), | |
| 65 | +}; | |
| 66 | + | |
| 29 | 67 | static struct smsc911x_platform_config smsc911x_data = { |
| 30 | 68 | .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, |
| 31 | 69 | .irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL, |
| @@ -38,29 +76,119 @@ static struct resource smsc911x_resources[] = { · 6 unmodified lines | ||
| 38 | 76 | DEFINE_RES_IRQ(irq_pin(0)), /* IRQ 0 */ |
| 39 | 77 | }; |
| 40 | 78 | |
| 79 | +/* SDHI */ | |
| 80 | +static struct sh_mobile_sdhi_info sdhi0_info = { | |
| 81 | + .tmio_caps = MMC_CAP_SD_HIGHSPEED, | |
| 82 | + .tmio_ocr_mask = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34, | |
| 83 | + .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT, | |
| 84 | +}; | |
| 85 | + | |
| 86 | +static struct sh_eth_plat_data ether_platform_data __initdata = { | |
| 87 | + .phy = 0x01, | |
| 88 | + .edmac_endian = EDMAC_LITTLE_ENDIAN, | |
| 89 | + .register_type = SH_ETH_REG_FAST_RCAR, | |
| 90 | + .phy_interface = PHY_INTERFACE_MODE_RMII, | |
| 91 | + /* | |
| 92 | + * Although the LINK signal is available on the board, it's connected to | |
| 93 | + * the link/activity LED output of the PHY, thus the link disappears and | |
| 94 | + * reappears after each packet. We'd be better off ignoring such signal | |
| 95 | + * and getting the link state from the PHY indirectly. | |
| 96 | + */ | |
| 97 | + .no_ether_link = 1, | |
| 98 | +}; | |
| 99 | + | |
| 100 | +/* I2C */ | |
| 101 | +static struct i2c_board_info i2c0_devices[] = { | |
| 102 | + { | |
| 103 | + I2C_BOARD_INFO("rx8581", 0x51), | |
| 104 | + }, | |
| 105 | +}; | |
| 106 | + | |
| 107 | +/* HSPI*/ | |
| 108 | +static struct mtd_partition m25p80_spi_flash_partitions[] = { | |
| 109 | + { | |
| 110 | + .name = "data(spi)", | |
| 111 | + .size = 0x0100000, | |
| 112 | + .offset = 0, | |
| 113 | + }, | |
| 114 | +}; | |
| 115 | + | |
| 116 | +static struct flash_platform_data spi_flash_data = { | |
| 117 | + .name = "m25p80", | |
| 118 | + .type = "s25fl008k", | |
| 119 | + .parts = m25p80_spi_flash_partitions, | |
| 120 | + .nr_parts = ARRAY_SIZE(m25p80_spi_flash_partitions), | |
| 121 | +}; | |
| 122 | + | |
| 123 | +static struct spi_board_info spi_board_info[] __initdata = { | |
| 124 | + { | |
| 125 | + .modalias = "m25p80", | |
| 126 | + .max_speed_hz = 104000000, | |
| 127 | + .chip_select = 0, | |
| 128 | + .bus_num = 0, | |
| 129 | + .mode = SPI_MODE_0, | |
| 130 | + .platform_data = &spi_flash_data, | |
| 131 | + }, | |
| 132 | +}; | |
| 133 | + | |
| 134 | +/* MMC */ | |
| 135 | +static struct sh_mmcif_plat_data sh_mmcif_plat = { | |
| 136 | + .sup_pclk = 0, | |
| 137 | + .ocr = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34, | |
| 138 | + .caps = MMC_CAP_4_BIT_DATA | | |
| 139 | + MMC_CAP_8_BIT_DATA | | |
| 140 | + MMC_CAP_NEEDS_POLL, | |
| 141 | +}; | |
| 142 | + | |
| 41 | 143 | static const struct pinctrl_map bockw_pinctrl_map[] = { |
| 144 | + /* Ether */ | |
| 145 | + PIN_MAP_MUX_GROUP_DEFAULT("r8a777x-ether", "pfc-r8a7778", | |
| 146 | + "ether_rmii", "ether"), | |
| 147 | + /* HSPI0 */ | |
| 148 | + PIN_MAP_MUX_GROUP_DEFAULT("sh-hspi.0", "pfc-r8a7778", | |
| 149 | + "hspi0_a", "hspi0"), | |
| 150 | + /* MMC */ | |
| 151 | + PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif", "pfc-r8a7778", | |
| 152 | + "mmc_data8", "mmc"), | |
| 153 | + PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif", "pfc-r8a7778", | |
| 154 | + "mmc_ctrl", "mmc"), | |
| 42 | 155 | /* SCIF0 */ |
| 43 | 156 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-r8a7778", |
| 44 | 157 | "scif0_data_a", "scif0"), |
| 45 | 158 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-r8a7778", |
| 46 | 159 | "scif0_ctrl", "scif0"), |
| 160 | + /* SDHI0 */ | |
| 161 | + PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7778", | |
| 162 | + "sdhi0", "sdhi0"), | |
| 47 | 163 | }; |
| 48 | 164 | |
| 165 | +#define FPGA 0x18200000 | |
| 49 | 166 | #define IRQ0MR 0x30 |
| 167 | +#define PFC 0xfffc0000 | |
| 168 | +#define PUPR4 0x110 | |
| 50 | 169 | static void __init bockw_init(void) |
| 51 | 170 | { |
| 52 | − void __iomem *fpga; | |
| 171 | + void __iomem *base; | |
| 53 | 172 | |
| 54 | 173 | r8a7778_clock_init(); |
| 55 | 174 | r8a7778_init_irq_extpin(1); |
| 56 | 175 | r8a7778_add_standard_devices(); |
| 176 | + r8a7778_add_ether_device(ðer_platform_data); | |
| 177 | + r8a7778_add_i2c_device(0); | |
| 178 | + r8a7778_add_hspi_device(0); | |
| 179 | + r8a7778_add_mmc_device(&sh_mmcif_plat); | |
| 57 | 180 | |
| 181 | + i2c_register_board_info(0, i2c0_devices, | |
| 182 | + ARRAY_SIZE(i2c0_devices)); | |
| 183 | + spi_register_board_info(spi_board_info, | |
| 184 | + ARRAY_SIZE(spi_board_info)); | |
| 58 | 185 | pinctrl_register_mappings(bockw_pinctrl_map, |
| 59 | 186 | ARRAY_SIZE(bockw_pinctrl_map)); |
| 60 | 187 | r8a7778_pinmux_init(); |
| 61 | 188 | |
| 62 | − fpga = ioremap_nocache(0x18200000, SZ_1M); | |
| 63 | − if (fpga) { | |
| 189 | + /* for SMSC */ | |
| 190 | + base = ioremap_nocache(FPGA, SZ_1M); | |
| 191 | + if (base) { | |
| 64 | 192 | /* |
| 65 | 193 | * CAUTION |
| 66 | 194 | * |
| @@ -68,16 +196,33 @@ static void __init bockw_init(void) · 1 unmodified line | ||
| 68 | 196 | * it should be cared in the future |
| 69 | 197 | * Now, it is assuming IRQ0 was used only from SMSC. |
| 70 | 198 | */ |
| 71 | − u16 val = ioread16(fpga + IRQ0MR); | |
| 199 | + u16 val = ioread16(base + IRQ0MR); | |
| 72 | 200 | val &= ~(1 << 4); /* enable SMSC911x */ |
| 73 | − iowrite16(val, fpga + IRQ0MR); | |
| 74 | − iounmap(fpga); | |
| 201 | + iowrite16(val, base + IRQ0MR); | |
| 202 | + iounmap(base); | |
| 203 | + | |
| 204 | + regulator_register_fixed(0, dummy_supplies, | |
| 205 | + ARRAY_SIZE(dummy_supplies)); | |
| 75 | 206 | |
| 76 | 207 | platform_device_register_resndata( |
| 77 | 208 | &platform_bus, "smsc911x", -1, |
| 78 | 209 | smsc911x_resources, ARRAY_SIZE(smsc911x_resources), |
| 79 | 210 | &smsc911x_data, sizeof(smsc911x_data)); |
| 80 | 211 | } |
| 212 | + | |
| 213 | + /* for SDHI */ | |
| 214 | + base = ioremap_nocache(PFC, 0x200); | |
| 215 | + if (base) { | |
| 216 | + /* | |
| 217 | + * FIXME | |
| 218 | + * | |
| 219 | + * SDHI CD/WP pin needs pull-up | |
| 220 | + */ | |
| 221 | + iowrite32(ioread32(base + PUPR4) | (3 << 26), base + PUPR4); | |
| 222 | + iounmap(base); | |
| 223 | + | |
| 224 | + r8a7778_sdhi_init(0, &sdhi0_info); | |
| 225 | + } | |
| 81 | 226 | } |
| 82 | 227 | |
| 83 | 228 | static const char *bockw_boards_compat_dt[] __initdata = { |
| @@ -56,7 +56,7 @@ static struct smsc911x_platform_config smsc911x_platdata = { · 55 unmodified lines | ||
| 56 | 56 | |
| 57 | 57 | static struct platform_device smsc91x_device = { |
| 58 | 58 | .name = "smsc911x", |
| 59 | − .id = 0, | |
| 59 | + .id = -1, | |
| 60 | 60 | .dev = { |
| 61 | 61 | .platform_data = &smsc911x_platdata, |
| 62 | 62 | }, |
| @@ -29,6 +29,7 @@ · 28 unmodified lines | ||
| 29 | 29 | #include <linux/mmc/host.h> |
| 30 | 30 | #include <linux/mmc/sh_mmcif.h> |
| 31 | 31 | #include <linux/mmc/sh_mobile_sdhi.h> |
| 32 | +#include <linux/mfd/as3711.h> | |
| 32 | 33 | #include <linux/mfd/tmio.h> |
| 33 | 34 | #include <linux/pinctrl/machine.h> |
| 34 | 35 | #include <linux/pinctrl/pinconf-generic.h> |
| @@ -606,6 +607,140 @@ static struct platform_device fsi_ak4648_device = { · 571 unmodified lines | ||
| 606 | 607 | }; |
| 607 | 608 | |
| 608 | 609 | /* I2C */ |
| 610 | + | |
| 611 | +/* StepDown1 is used to supply 1.315V to the CPU */ | |
| 612 | +static struct regulator_init_data as3711_sd1 = { | |
| 613 | + .constraints = { | |
| 614 | + .name = "1.315V CPU", | |
| 615 | + .boot_on = 1, | |
| 616 | + .always_on = 1, | |
| 617 | + .min_uV = 1315000, | |
| 618 | + .max_uV = 1335000, | |
| 619 | + }, | |
| 620 | +}; | |
| 621 | + | |
| 622 | +/* StepDown2 is used to supply 1.8V to the CPU and to the board */ | |
| 623 | +static struct regulator_init_data as3711_sd2 = { | |
| 624 | + .constraints = { | |
| 625 | + .name = "1.8V", | |
| 626 | + .boot_on = 1, | |
| 627 | + .always_on = 1, | |
| 628 | + .min_uV = 1800000, | |
| 629 | + .max_uV = 1800000, | |
| 630 | + }, | |
| 631 | +}; | |
| 632 | + | |
| 633 | +/* | |
| 634 | + * StepDown3 is switched in parallel with StepDown2, seems to be off, | |
| 635 | + * according to read-back pre-set register values | |
| 636 | + */ | |
| 637 | + | |
| 638 | +/* StepDown4 is used to supply 1.215V to the CPU and to the board */ | |
| 639 | +static struct regulator_init_data as3711_sd4 = { | |
| 640 | + .constraints = { | |
| 641 | + .name = "1.215V", | |
| 642 | + .boot_on = 1, | |
| 643 | + .always_on = 1, | |
| 644 | + .min_uV = 1215000, | |
| 645 | + .max_uV = 1235000, | |
| 646 | + }, | |
| 647 | +}; | |
| 648 | + | |
| 649 | +/* LDO1 is unused and unconnected */ | |
| 650 | + | |
| 651 | +/* LDO2 is used to supply 2.8V to the CPU */ | |
| 652 | +static struct regulator_init_data as3711_ldo2 = { | |
| 653 | + .constraints = { | |
| 654 | + .name = "2.8V CPU", | |
| 655 | + .boot_on = 1, | |
| 656 | + .always_on = 1, | |
| 657 | + .min_uV = 2800000, | |
| 658 | + .max_uV = 2800000, | |
| 659 | + }, | |
| 660 | +}; | |
| 661 | + | |
| 662 | +/* LDO3 is used to supply 3.0V to the CPU */ | |
| 663 | +static struct regulator_init_data as3711_ldo3 = { | |
| 664 | + .constraints = { | |
| 665 | + .name = "3.0V CPU", | |
| 666 | + .boot_on = 1, | |
| 667 | + .always_on = 1, | |
| 668 | + .min_uV = 3000000, | |
| 669 | + .max_uV = 3000000, | |
| 670 | + }, | |
| 671 | +}; | |
| 672 | + | |
| 673 | +/* LDO4 is used to supply 2.8V to the board */ | |
| 674 | +static struct regulator_init_data as3711_ldo4 = { | |
| 675 | + .constraints = { | |
| 676 | + .name = "2.8V", | |
| 677 | + .boot_on = 1, | |
| 678 | + .always_on = 1, | |
| 679 | + .min_uV = 2800000, | |
| 680 | + .max_uV = 2800000, | |
| 681 | + }, | |
| 682 | +}; | |
| 683 | + | |
| 684 | +/* LDO5 is switched parallel to LDO4, also set to 2.8V */ | |
| 685 | +static struct regulator_init_data as3711_ldo5 = { | |
| 686 | + .constraints = { | |
| 687 | + .name = "2.8V #2", | |
| 688 | + .boot_on = 1, | |
| 689 | + .always_on = 1, | |
| 690 | + .min_uV = 2800000, | |
| 691 | + .max_uV = 2800000, | |
| 692 | + }, | |
| 693 | +}; | |
| 694 | + | |
| 695 | +/* LDO6 is unused and unconnected */ | |
| 696 | + | |
| 697 | +/* LDO7 is used to supply 1.15V to the CPU */ | |
| 698 | +static struct regulator_init_data as3711_ldo7 = { | |
| 699 | + .constraints = { | |
| 700 | + .name = "1.15V CPU", | |
| 701 | + .boot_on = 1, | |
| 702 | + .always_on = 1, | |
| 703 | + .min_uV = 1150000, | |
| 704 | + .max_uV = 1150000, | |
| 705 | + }, | |
| 706 | +}; | |
| 707 | + | |
| 708 | +/* LDO8 is switched parallel to LDO7, also set to 1.15V */ | |
| 709 | +static struct regulator_init_data as3711_ldo8 = { | |
| 710 | + .constraints = { | |
| 711 | + .name = "1.15V CPU #2", | |
| 712 | + .boot_on = 1, | |
| 713 | + .always_on = 1, | |
| 714 | + .min_uV = 1150000, | |
| 715 | + .max_uV = 1150000, | |
| 716 | + }, | |
| 717 | +}; | |
| 718 | + | |
| 719 | +static struct as3711_platform_data as3711_pdata = { | |
| 720 | + .regulator = { | |
| 721 | + .init_data = { | |
| 722 | + [AS3711_REGULATOR_SD_1] = &as3711_sd1, | |
| 723 | + [AS3711_REGULATOR_SD_2] = &as3711_sd2, | |
| 724 | + [AS3711_REGULATOR_SD_4] = &as3711_sd4, | |
| 725 | + [AS3711_REGULATOR_LDO_2] = &as3711_ldo2, | |
| 726 | + [AS3711_REGULATOR_LDO_3] = &as3711_ldo3, | |
| 727 | + [AS3711_REGULATOR_LDO_4] = &as3711_ldo4, | |
| 728 | + [AS3711_REGULATOR_LDO_5] = &as3711_ldo5, | |
| 729 | + [AS3711_REGULATOR_LDO_7] = &as3711_ldo7, | |
| 730 | + [AS3711_REGULATOR_LDO_8] = &as3711_ldo8, | |
| 731 | + }, | |
| 732 | + }, | |
| 733 | + .backlight = { | |
| 734 | + .su2_fb = "sh_mobile_lcdc_fb.0", | |
| 735 | + .su2_max_uA = 36000, | |
| 736 | + .su2_feedback = AS3711_SU2_CURR_AUTO, | |
| 737 | + .su2_fbprot = AS3711_SU2_GPIO4, | |
| 738 | + .su2_auto_curr1 = true, | |
| 739 | + .su2_auto_curr2 = true, | |
| 740 | + .su2_auto_curr3 = true, | |
| 741 | + }, | |
| 742 | +}; | |
| 743 | + | |
| 609 | 744 | static struct pcf857x_platform_data pcf8575_pdata = { |
| 610 | 745 | .gpio_base = GPIO_PCF8575_BASE, |
| 611 | 746 | }; |
| @@ -625,6 +760,11 @@ static struct i2c_board_info i2c0_devices[] = { · 13 unmodified lines | ||
| 625 | 760 | I2C_BOARD_INFO("adxl34x", 0x1d), |
| 626 | 761 | .irq = irq_pin(26), /* IRQ26 */ |
| 627 | 762 | }, |
| 763 | + { | |
| 764 | + I2C_BOARD_INFO("as3711", 0x40), | |
| 765 | + .irq = intcs_evt2irq(0x3300), /* IRQ24 */ | |
| 766 | + .platform_data = &as3711_pdata, | |
| 767 | + }, | |
| 628 | 768 | }; |
| 629 | 769 | |
| 630 | 770 | static struct i2c_board_info i2c1_devices[] = { |
| @@ -715,59 +855,6 @@ static const struct pinctrl_map kzm_pinctrl_map[] = { · 84 unmodified lines | ||
| 715 | 855 | "usb_vbus", "usb"), |
| 716 | 856 | }; |
| 717 | 857 | |
| 718 | −/* | |
| 719 | − * FIXME | |
| 720 | − * | |
| 721 | − * This is quick hack for enabling LCDC backlight | |
| 722 | − */ | |
| 723 | −static int __init as3711_enable_lcdc_backlight(void) | |
| 724 | −{ | |
| 725 | − struct i2c_adapter *a = i2c_get_adapter(0); | |
| 726 | − struct i2c_msg msg; | |
| 727 | − int i, ret; | |
| 728 | − __u8 magic[] = { | |
| 729 | − 0x40, 0x2a, | |
| 730 | − 0x43, 0x3c, | |
| 731 | − 0x44, 0x3c, | |
| 732 | − 0x45, 0x3c, | |
| 733 | − 0x54, 0x03, | |
| 734 | − 0x51, 0x00, | |
| 735 | − 0x51, 0x01, | |
| 736 | − 0xff, 0x00, /* wait */ | |
| 737 | − 0x43, 0xf0, | |
| 738 | − 0x44, 0xf0, | |
| 739 | − 0x45, 0xf0, | |
| 740 | − }; | |
| 741 | − | |
| 742 | − if (!of_machine_is_compatible("renesas,kzm9g")) | |
| 743 | − return 0; | |
| 744 | − | |
| 745 | − if (!a) | |
| 746 | − return 0; | |
| 747 | − | |
| 748 | − msg.addr = 0x40; | |
| 749 | − msg.len = 2; | |
| 750 | − msg.flags = 0; | |
| 751 | − | |
| 752 | − for (i = 0; i < ARRAY_SIZE(magic); i += 2) { | |
| 753 | − msg.buf = magic + i; | |
| 754 | − | |
| 755 | − if (0xff == msg.buf[0]) { | |
| 756 | − udelay(500); | |
| 757 | − continue; | |
| 758 | − } | |
| 759 | − | |
| 760 | − ret = i2c_transfer(a, &msg, 1); | |
| 761 | − if (ret < 0) { | |
| 762 | − pr_err("i2c transfer fail\n"); | |
| 763 | − break; | |
| 764 | − } | |
| 765 | − } | |
| 766 | − | |
| 767 | − return 0; | |
| 768 | −} | |
| 769 | −device_initcall(as3711_enable_lcdc_backlight); | |
| 770 | − | |
| 771 | 858 | static void __init kzm_init(void) |
| 772 | 859 | { |
| 773 | 860 | regulator_register_always_on(2, "fixed-1.8V", fixed1v8_power_consumers, |
| @@ -18,16 +18,59 @@ · 17 unmodified lines | ||
| 18 | 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| 19 | 19 | */ |
| 20 | 20 | |
| 21 | +#include <linux/gpio.h> | |
| 22 | +#include <linux/gpio_keys.h> | |
| 23 | +#include <linux/input.h> | |
| 21 | 24 | #include <linux/interrupt.h> |
| 22 | 25 | #include <linux/irqchip.h> |
| 23 | 26 | #include <linux/kernel.h> |
| 27 | +#include <linux/leds.h> | |
| 24 | 28 | #include <linux/pinctrl/machine.h> |
| 29 | +#include <linux/platform_data/gpio-rcar.h> | |
| 25 | 30 | #include <linux/platform_device.h> |
| 26 | 31 | #include <mach/common.h> |
| 27 | 32 | #include <mach/r8a7790.h> |
| 28 | 33 | #include <asm/mach-types.h> |
| 29 | 34 | #include <asm/mach/arch.h> |
| 30 | 35 | |
| 36 | +/* LEDS */ | |
| 37 | +static struct gpio_led lager_leds[] = { | |
| 38 | + { | |
| 39 | + .name = "led8", | |
| 40 | + .gpio = RCAR_GP_PIN(5, 17), | |
| 41 | + .default_state = LEDS_GPIO_DEFSTATE_ON, | |
| 42 | + }, { | |
| 43 | + .name = "led7", | |
| 44 | + .gpio = RCAR_GP_PIN(4, 23), | |
| 45 | + .default_state = LEDS_GPIO_DEFSTATE_ON, | |
| 46 | + }, { | |
| 47 | + .name = "led6", | |
| 48 | + .gpio = RCAR_GP_PIN(4, 22), | |
| 49 | + .default_state = LEDS_GPIO_DEFSTATE_ON, | |
| 50 | + }, | |
| 51 | +}; | |
| 52 | + | |
| 53 | +static __initdata struct gpio_led_platform_data lager_leds_pdata = { | |
| 54 | + .leds = lager_leds, | |
| 55 | + .num_leds = ARRAY_SIZE(lager_leds), | |
| 56 | +}; | |
| 57 | + | |
| 58 | +/* GPIO KEY */ | |
| 59 | +#define GPIO_KEY(c, g, d, ...) \ | |
| 60 | + { .code = c, .gpio = g, .desc = d, .active_low = 1 } | |
| 61 | + | |
| 62 | +static __initdata struct gpio_keys_button gpio_buttons[] = { | |
| 63 | + GPIO_KEY(KEY_4, RCAR_GP_PIN(1, 28), "SW2-pin4"), | |
| 64 | + GPIO_KEY(KEY_3, RCAR_GP_PIN(1, 26), "SW2-pin3"), | |
| 65 | + GPIO_KEY(KEY_2, RCAR_GP_PIN(1, 24), "SW2-pin2"), | |
| 66 | + GPIO_KEY(KEY_1, RCAR_GP_PIN(1, 14), "SW2-pin1"), | |
| 67 | +}; | |
| 68 | + | |
| 69 | +static __initdata struct gpio_keys_platform_data lager_keys_pdata = { | |
| 70 | + .buttons = gpio_buttons, | |
| 71 | + .nbuttons = ARRAY_SIZE(gpio_buttons), | |
| 72 | +}; | |
| 73 | + | |
| 31 | 74 | static const struct pinctrl_map lager_pinctrl_map[] = { |
| 32 | 75 | /* SCIF0 (CN19: DEBUG SERIAL0) */ |
| 33 | 76 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.6", "pfc-r8a7790", |
| @@ -46,6 +89,12 @@ static void __init lager_add_standard_devices(void) · 12 unmodified lines | ||
| 46 | 89 | r8a7790_pinmux_init(); |
| 47 | 90 | |
| 48 | 91 | r8a7790_add_standard_devices(); |
| 92 | + platform_device_register_data(&platform_bus, "leds-gpio", -1, | |
| 93 | + &lager_leds_pdata, | |
| 94 | + sizeof(lager_leds_pdata)); | |
| 95 | + platform_device_register_data(&platform_bus, "gpio-keys", -1, | |
| 96 | + &lager_keys_pdata, | |
| 97 | + sizeof(lager_keys_pdata)); | |
| 49 | 98 | } |
| 50 | 99 | |
| 51 | 100 | static const char *lager_boards_compat_dt[] __initdata = { |
| @@ -69,7 +69,7 @@ static struct resource smsc911x_resources[] = { · 68 unmodified lines | ||
| 69 | 69 | .flags = IORESOURCE_MEM, |
| 70 | 70 | }, |
| 71 | 71 | [1] = { |
| 72 | − .start = gic_iid(0x3c), /* IRQ 1 */ | |
| 72 | + .start = irq_pin(1), /* IRQ 1 */ | |
| 73 | 73 | .flags = IORESOURCE_IRQ, |
| 74 | 74 | }, |
| 75 | 75 | }; |
| @@ -350,7 +350,7 @@ static struct platform_device *marzen_late_devices[] __initdata = { · 274 unmodified lines | ||
| 350 | 350 | &ohci1_device, |
| 351 | 351 | }; |
| 352 | 352 | |
| 353 | −void __init marzen_init_late(void) | |
| 353 | +static void __init marzen_init_late(void) | |
| 354 | 354 | { |
| 355 | 355 | /* get usb phy */ |
| 356 | 356 | phy = usb_get_phy(USB_PHY_TYPE_USB2); |
| @@ -405,6 +405,7 @@ static void __init marzen_init(void) · 48 unmodified lines | ||
| 405 | 405 | pinctrl_register_mappings(marzen_pinctrl_map, |
| 406 | 406 | ARRAY_SIZE(marzen_pinctrl_map)); |
| 407 | 407 | r8a7779_pinmux_init(); |
| 408 | + r8a7779_init_irq_extpin(1); /* IRQ1 as individual interrupt */ | |
| 408 | 409 | |
| 409 | 410 | r8a7779_add_standard_devices(); |
| 410 | 411 | platform_add_devices(marzen_devices, ARRAY_SIZE(marzen_devices)); |
| @@ -29,6 +29,7 @@ · 28 unmodified lines | ||
| 29 | 29 | #define CPG_LEN 0x270 |
| 30 | 30 | |
| 31 | 31 | #define SMSTPCR2 0xe6150138 |
| 32 | +#define SMSTPCR3 0xe615013c | |
| 32 | 33 | #define SMSTPCR5 0xe6150144 |
| 33 | 34 | |
| 34 | 35 | #define FRQCRA 0xE6150000 |
| @@ -348,6 +349,7 @@ static struct clk div6_clks[DIV6_NR] = { · 313 unmodified lines | ||
| 348 | 349 | /* MSTP */ |
| 349 | 350 | enum { |
| 350 | 351 | MSTP217, MSTP216, MSTP207, MSTP206, MSTP204, MSTP203, |
| 352 | + MSTP315, MSTP314, MSTP313, MSTP312, MSTP305, | |
| 351 | 353 | MSTP522, |
| 352 | 354 | MSTP_NR |
| 353 | 355 | }; |
| @@ -359,6 +361,11 @@ static struct clk mstp_clks[MSTP_NR] = { · 5 unmodified lines | ||
| 359 | 361 | [MSTP207] = SH_CLK_MSTP32(&div6_clks[DIV6_MP], SMSTPCR2, 7, 0), /* SCIFB1 */ |
| 360 | 362 | [MSTP216] = SH_CLK_MSTP32(&div6_clks[DIV6_MP], SMSTPCR2, 16, 0), /* SCIFB2 */ |
| 361 | 363 | [MSTP217] = SH_CLK_MSTP32(&div6_clks[DIV6_MP], SMSTPCR2, 17, 0), /* SCIFB3 */ |
| 364 | + [MSTP305] = SH_CLK_MSTP32(&div6_clks[DIV6_MMC1],SMSTPCR3, 5, 0), /* MMCIF1 */ | |
| 365 | + [MSTP312] = SH_CLK_MSTP32(&div6_clks[DIV6_SDHI2],SMSTPCR3, 12, 0), /* SDHI2 */ | |
| 366 | + [MSTP313] = SH_CLK_MSTP32(&div6_clks[DIV6_SDHI1],SMSTPCR3, 13, 0), /* SDHI1 */ | |
| 367 | + [MSTP314] = SH_CLK_MSTP32(&div6_clks[DIV6_SDHI0],SMSTPCR3, 14, 0), /* SDHI0 */ | |
| 368 | + [MSTP315] = SH_CLK_MSTP32(&div6_clks[DIV6_MMC0],SMSTPCR3, 15, 0), /* MMCIF0 */ | |
| 362 | 369 | [MSTP522] = SH_CLK_MSTP32(&extal2_clk, SMSTPCR5, 22, 0), /* Thermal */ |
| 363 | 370 | }; |
| 364 | 371 | |
| @@ -381,11 +388,6 @@ static struct clk_lookup lookups[] = { · 16 unmodified lines | ||
| 381 | 388 | |
| 382 | 389 | /* DIV6 */ |
| 383 | 390 | CLKDEV_CON_ID("zb", &div6_clks[DIV6_ZB]), |
| 384 | − CLKDEV_CON_ID("sdhi0", &div6_clks[DIV6_SDHI0]), | |
| 385 | − CLKDEV_CON_ID("sdhi1", &div6_clks[DIV6_SDHI1]), | |
| 386 | − CLKDEV_CON_ID("sdhi2", &div6_clks[DIV6_SDHI2]), | |
| 387 | − CLKDEV_CON_ID("mmc0", &div6_clks[DIV6_MMC0]), | |
| 388 | − CLKDEV_CON_ID("mmc1", &div6_clks[DIV6_MMC1]), | |
| 389 | 391 | CLKDEV_CON_ID("vck1", &div6_clks[DIV6_VCK1]), |
| 390 | 392 | CLKDEV_CON_ID("vck2", &div6_clks[DIV6_VCK2]), |
| 391 | 393 | CLKDEV_CON_ID("vck3", &div6_clks[DIV6_VCK3]), |
| @@ -406,6 +408,16 @@ static struct clk_lookup lookups[] = { · 14 unmodified lines | ||
| 406 | 408 | CLKDEV_DEV_ID("sh-sci.4", &mstp_clks[MSTP216]), |
| 407 | 409 | CLKDEV_DEV_ID("sh-sci.5", &mstp_clks[MSTP217]), |
| 408 | 410 | CLKDEV_DEV_ID("rcar_thermal", &mstp_clks[MSTP522]), |
| 411 | + CLKDEV_DEV_ID("sh_mmcif.1", &mstp_clks[MSTP305]), | |
| 412 | + CLKDEV_DEV_ID("ee220000.mmcif", &mstp_clks[MSTP305]), | |
| 413 | + CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP312]), | |
| 414 | + CLKDEV_DEV_ID("ee140000.sdhi", &mstp_clks[MSTP312]), | |
| 415 | + CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP313]), | |
| 416 | + CLKDEV_DEV_ID("ee120000.sdhi", &mstp_clks[MSTP313]), | |
| 417 | + CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP314]), | |
| 418 | + CLKDEV_DEV_ID("ee100000.sdhi", &mstp_clks[MSTP314]), | |
| 419 | + CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP315]), | |
| 420 | + CLKDEV_DEV_ID("ee200000.mmcif", &mstp_clks[MSTP315]), | |
| 409 | 421 | |
| 410 | 422 | /* for DT */ |
| 411 | 423 | CLKDEV_DEV_ID("e61f0000.thermal", &mstp_clks[MSTP522]), |
| @@ -103,17 +103,25 @@ static struct clk *main_clks[] = { · 102 unmodified lines | ||
| 103 | 103 | }; |
| 104 | 104 | |
| 105 | 105 | enum { |
| 106 | + MSTP331, | |
| 106 | 107 | MSTP323, MSTP322, MSTP321, |
| 107 | 108 | MSTP114, |
| 108 | − MSTP026, MSTP025, MSTP024, MSTP023, MSTP022, MSTP021, | |
| 109 | + MSTP030, | |
| 110 | + MSTP029, MSTP028, MSTP027, MSTP026, MSTP025, MSTP024, MSTP023, MSTP022, MSTP021, | |
| 109 | 111 | MSTP016, MSTP015, |
| 112 | + MSTP007, | |
| 110 | 113 | MSTP_NR }; |
| 111 | 114 | |
| 112 | 115 | static struct clk mstp_clks[MSTP_NR] = { |
| 116 | + [MSTP331] = SH_CLK_MSTP32(&s4_clk, MSTPCR3, 31, 0), /* MMC */ | |
| 113 | 117 | [MSTP323] = SH_CLK_MSTP32(&p_clk, MSTPCR3, 23, 0), /* SDHI0 */ |
| 114 | 118 | [MSTP322] = SH_CLK_MSTP32(&p_clk, MSTPCR3, 22, 0), /* SDHI1 */ |
| 115 | 119 | [MSTP321] = SH_CLK_MSTP32(&p_clk, MSTPCR3, 21, 0), /* SDHI2 */ |
| 116 | 120 | [MSTP114] = SH_CLK_MSTP32(&p_clk, MSTPCR1, 14, 0), /* Ether */ |
| 121 | + [MSTP030] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 30, 0), /* I2C0 */ | |
| 122 | + [MSTP029] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 29, 0), /* I2C1 */ | |
| 123 | + [MSTP028] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 28, 0), /* I2C2 */ | |
| 124 | + [MSTP027] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 27, 0), /* I2C3 */ | |
| 117 | 125 | [MSTP026] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 26, 0), /* SCIF0 */ |
| 118 | 126 | [MSTP025] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 25, 0), /* SCIF1 */ |
| 119 | 127 | [MSTP024] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 24, 0), /* SCIF2 */ |
| @@ -122,14 +130,24 @@ static struct clk mstp_clks[MSTP_NR] = { · 2 unmodified lines | ||
| 122 | 130 | [MSTP021] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 21, 0), /* SCIF5 */ |
| 123 | 131 | [MSTP016] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 16, 0), /* TMU0 */ |
| 124 | 132 | [MSTP015] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 15, 0), /* TMU1 */ |
| 133 | + [MSTP007] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 7, 0), /* HSPI */ | |
| 125 | 134 | }; |
| 126 | 135 | |
| 127 | 136 | static struct clk_lookup lookups[] = { |
| 137 | + /* main */ | |
| 138 | + CLKDEV_CON_ID("shyway_clk", &s_clk), | |
| 139 | + CLKDEV_CON_ID("peripheral_clk", &p_clk), | |
| 140 | + | |
| 128 | 141 | /* MSTP32 clocks */ |
| 142 | + CLKDEV_DEV_ID("sh_mmcif", &mstp_clks[MSTP331]), /* MMC */ | |
| 129 | 143 | CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP323]), /* SDHI0 */ |
| 130 | 144 | CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP322]), /* SDHI1 */ |
| 131 | 145 | CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP321]), /* SDHI2 */ |
| 132 | 146 | CLKDEV_DEV_ID("sh-eth", &mstp_clks[MSTP114]), /* Ether */ |
| 147 | + CLKDEV_DEV_ID("i2c-rcar.0", &mstp_clks[MSTP030]), /* I2C0 */ | |
| 148 | + CLKDEV_DEV_ID("i2c-rcar.1", &mstp_clks[MSTP029]), /* I2C1 */ | |
| 149 | + CLKDEV_DEV_ID("i2c-rcar.2", &mstp_clks[MSTP028]), /* I2C2 */ | |
| 150 | + CLKDEV_DEV_ID("i2c-rcar.3", &mstp_clks[MSTP027]), /* I2C3 */ | |
| 133 | 151 | CLKDEV_DEV_ID("sh-sci.0", &mstp_clks[MSTP026]), /* SCIF0 */ |
| 134 | 152 | CLKDEV_DEV_ID("sh-sci.1", &mstp_clks[MSTP025]), /* SCIF1 */ |
| 135 | 153 | CLKDEV_DEV_ID("sh-sci.2", &mstp_clks[MSTP024]), /* SCIF2 */ |
| @@ -138,6 +156,9 @@ static struct clk_lookup lookups[] = { · 2 unmodified lines | ||
| 138 | 156 | CLKDEV_DEV_ID("sh-sci.5", &mstp_clks[MSTP021]), /* SCIF6 */ |
| 139 | 157 | CLKDEV_DEV_ID("sh_tmu.0", &mstp_clks[MSTP016]), /* TMU00 */ |
| 140 | 158 | CLKDEV_DEV_ID("sh_tmu.1", &mstp_clks[MSTP015]), /* TMU01 */ |
| 159 | + CLKDEV_DEV_ID("sh-hspi.0", &mstp_clks[MSTP007]), /* HSPI0 */ | |
| 160 | + CLKDEV_DEV_ID("sh-hspi.1", &mstp_clks[MSTP007]), /* HSPI1 */ | |
| 161 | + CLKDEV_DEV_ID("sh-hspi.2", &mstp_clks[MSTP007]), /* HSPI2 */ | |
| 141 | 162 | }; |
| 142 | 163 | |
| 143 | 164 | void __init r8a7778_clock_init(void) |
| @@ -181,7 +181,8 @@ static struct clk div6_clks[DIV6_NR] = { · 180 unmodified lines | ||
| 181 | 181 | /* MSTP */ |
| 182 | 182 | enum { |
| 183 | 183 | MSTP721, MSTP720, |
| 184 | − MSTP304, | |
| 184 | + MSTP717, MSTP716, | |
| 185 | + MSTP315, MSTP314, MSTP313, MSTP312, MSTP311, MSTP305, MSTP304, | |
| 185 | 186 | MSTP216, MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, |
| 186 | 187 | MSTP_NR |
| 187 | 188 | }; |
| @@ -189,6 +190,12 @@ enum { · 1 unmodified line | ||
| 189 | 190 | static struct clk mstp_clks[MSTP_NR] = { |
| 190 | 191 | [MSTP721] = SH_CLK_MSTP32(&p_clk, SMSTPCR7, 21, 0), /* SCIF0 */ |
| 191 | 192 | [MSTP720] = SH_CLK_MSTP32(&p_clk, SMSTPCR7, 20, 0), /* SCIF1 */ |
| 193 | + [MSTP315] = SH_CLK_MSTP32(&div6_clks[DIV6_MMC0], SMSTPCR3, 15, 0), /* MMC0 */ | |
| 194 | + [MSTP314] = SH_CLK_MSTP32(&div4_clks[DIV4_SD0], SMSTPCR3, 14, 0), /* SDHI0 */ | |
| 195 | + [MSTP313] = SH_CLK_MSTP32(&div4_clks[DIV4_SD1], SMSTPCR3, 13, 0), /* SDHI1 */ | |
| 196 | + [MSTP312] = SH_CLK_MSTP32(&div6_clks[DIV6_SD2], SMSTPCR3, 12, 0), /* SDHI2 */ | |
| 197 | + [MSTP311] = SH_CLK_MSTP32(&div6_clks[DIV6_SD3], SMSTPCR3, 11, 0), /* SDHI3 */ | |
| 198 | + [MSTP305] = SH_CLK_MSTP32(&div6_clks[DIV6_MMC1], SMSTPCR3, 5, 0), /* MMC1 */ | |
| 192 | 199 | [MSTP304] = SH_CLK_MSTP32(&cp_clk, SMSTPCR3, 4, 0), /* TPU0 */ |
| 193 | 200 | [MSTP216] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 16, 0), /* SCIFB2 */ |
| 194 | 201 | [MSTP207] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 7, 0), /* SCIFB1 */ |
| @@ -196,6 +203,8 @@ static struct clk mstp_clks[MSTP_NR] = { · 1 unmodified line | ||
| 196 | 203 | [MSTP204] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 4, 0), /* SCIFA0 */ |
| 197 | 204 | [MSTP203] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 3, 0), /* SCIFA1 */ |
| 198 | 205 | [MSTP202] = SH_CLK_MSTP32(&mp_clk, SMSTPCR2, 2, 0), /* SCIFA2 */ |
| 206 | + [MSTP717] = SH_CLK_MSTP32(&zs_clk, SMSTPCR7, 17, 0), /* HSCIF0 */ | |
| 207 | + [MSTP716] = SH_CLK_MSTP32(&zs_clk, SMSTPCR7, 16, 0), /* HSCIF1 */ | |
| 199 | 208 | }; |
| 200 | 209 | |
| 201 | 210 | static struct clk_lookup lookups[] = { |
| @@ -229,14 +238,8 @@ static struct clk_lookup lookups[] = { · 27 unmodified lines | ||
| 229 | 238 | |
| 230 | 239 | /* DIV4 */ |
| 231 | 240 | CLKDEV_CON_ID("sdh", &div4_clks[DIV4_SDH]), |
| 232 | − CLKDEV_CON_ID("sd0", &div4_clks[DIV4_SD0]), | |
| 233 | − CLKDEV_CON_ID("sd1", &div4_clks[DIV4_SD1]), | |
| 234 | 241 | |
| 235 | 242 | /* DIV6 */ |
| 236 | − CLKDEV_CON_ID("sd2", &div6_clks[DIV6_SD2]), | |
| 237 | − CLKDEV_CON_ID("sd3", &div6_clks[DIV6_SD3]), | |
| 238 | − CLKDEV_CON_ID("mmc0", &div6_clks[DIV6_MMC0]), | |
| 239 | − CLKDEV_CON_ID("mmc1", &div6_clks[DIV6_MMC1]), | |
| 240 | 243 | CLKDEV_CON_ID("ssp", &div6_clks[DIV6_SSP]), |
| 241 | 244 | CLKDEV_CON_ID("ssprs", &div6_clks[DIV6_SSPRS]), |
| 242 | 245 | |
| @@ -249,6 +252,20 @@ static struct clk_lookup lookups[] = { · 6 unmodified lines | ||
| 249 | 252 | CLKDEV_DEV_ID("sh-sci.5", &mstp_clks[MSTP202]), |
| 250 | 253 | CLKDEV_DEV_ID("sh-sci.6", &mstp_clks[MSTP721]), |
| 251 | 254 | CLKDEV_DEV_ID("sh-sci.7", &mstp_clks[MSTP720]), |
| 255 | + CLKDEV_DEV_ID("sh-sci.8", &mstp_clks[MSTP717]), | |
| 256 | + CLKDEV_DEV_ID("sh-sci.9", &mstp_clks[MSTP716]), | |
| 257 | + CLKDEV_DEV_ID("ee200000.mmcif", &mstp_clks[MSTP315]), | |
| 258 | + CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP315]), | |
| 259 | + CLKDEV_DEV_ID("ee100000.sdhi", &mstp_clks[MSTP314]), | |
| 260 | + CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP314]), | |
| 261 | + CLKDEV_DEV_ID("ee120000.sdhi", &mstp_clks[MSTP313]), | |
| 262 | + CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP313]), | |
| 263 | + CLKDEV_DEV_ID("ee140000.sdhi", &mstp_clks[MSTP312]), | |
| 264 | + CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP312]), | |
| 265 | + CLKDEV_DEV_ID("ee160000.sdhi", &mstp_clks[MSTP311]), | |
| 266 | + CLKDEV_DEV_ID("sh_mobile_sdhi.3", &mstp_clks[MSTP311]), | |
| 267 | + CLKDEV_DEV_ID("ee220000.mmcif", &mstp_clks[MSTP305]), | |
| 268 | + CLKDEV_DEV_ID("sh_mmcif.1", &mstp_clks[MSTP305]), | |
| 252 | 269 | }; |
| 253 | 270 | |
| 254 | 271 | #define R8A7790_CLOCK_ROOT(e, m, p0, p1, p30, p31) \ |
| @@ -18,12 +18,17 @@ · 17 unmodified lines | ||
| 18 | 18 | #ifndef __ASM_R8A7778_H__ |
| 19 | 19 | #define __ASM_R8A7778_H__ |
| 20 | 20 | |
| 21 | +#include <linux/mmc/sh_mmcif.h> | |
| 21 | 22 | #include <linux/mmc/sh_mobile_sdhi.h> |
| 22 | 23 | #include <linux/sh_eth.h> |
| 23 | 24 | |
| 24 | 25 | extern void r8a7778_add_standard_devices(void); |
| 25 | 26 | extern void r8a7778_add_standard_devices_dt(void); |
| 26 | 27 | extern void r8a7778_add_ether_device(struct sh_eth_plat_data *pdata); |
| 28 | +extern void r8a7778_add_i2c_device(int id); | |
| 29 | +extern void r8a7778_add_hspi_device(int id); | |
| 30 | +extern void r8a7778_add_mmc_device(struct sh_mmcif_plat_data *info); | |
| 31 | + | |
| 27 | 32 | extern void r8a7778_init_delay(void); |
| 28 | 33 | extern void r8a7778_init_irq(void); |
| 29 | 34 | extern void r8a7778_init_irq_dt(void); |
| @@ -97,7 +97,7 @@ static struct resource ether_resources[] = { · 96 unmodified lines | ||
| 97 | 97 | |
| 98 | 98 | void __init r8a7778_add_ether_device(struct sh_eth_plat_data *pdata) |
| 99 | 99 | { |
| 100 | − platform_device_register_resndata(&platform_bus, "sh_eth", -1, | |
| 100 | + platform_device_register_resndata(&platform_bus, "r8a777x-ether", -1, | |
| 101 | 101 | ether_resources, |
| 102 | 102 | ARRAY_SIZE(ether_resources), |
| 103 | 103 | pdata, sizeof(*pdata)); |
| @@ -173,6 +173,67 @@ void __init r8a7778_sdhi_init(int id, · 69 unmodified lines | ||
| 173 | 173 | info, sizeof(*info)); |
| 174 | 174 | } |
| 175 | 175 | |
| 176 | +/* I2C */ | |
| 177 | +static struct resource i2c_resources[] __initdata = { | |
| 178 | + /* I2C0 */ | |
| 179 | + DEFINE_RES_MEM(0xffc70000, 0x1000), | |
| 180 | + DEFINE_RES_IRQ(gic_iid(0x63)), | |
| 181 | + /* I2C1 */ | |
| 182 | + DEFINE_RES_MEM(0xffc71000, 0x1000), | |
| 183 | + DEFINE_RES_IRQ(gic_iid(0x6e)), | |
| 184 | + /* I2C2 */ | |
| 185 | + DEFINE_RES_MEM(0xffc72000, 0x1000), | |
| 186 | + DEFINE_RES_IRQ(gic_iid(0x6c)), | |
| 187 | + /* I2C3 */ | |
| 188 | + DEFINE_RES_MEM(0xffc73000, 0x1000), | |
| 189 | + DEFINE_RES_IRQ(gic_iid(0x6d)), | |
| 190 | +}; | |
| 191 | + | |
| 192 | +void __init r8a7778_add_i2c_device(int id) | |
| 193 | +{ | |
| 194 | + BUG_ON(id < 0 || id > 3); | |
| 195 | + | |
| 196 | + platform_device_register_simple( | |
| 197 | + "i2c-rcar", id, | |
| 198 | + i2c_resources + (2 * id), 2); | |
| 199 | +} | |
| 200 | + | |
| 201 | +/* HSPI */ | |
| 202 | +static struct resource hspi_resources[] __initdata = { | |
| 203 | + /* HSPI0 */ | |
| 204 | + DEFINE_RES_MEM(0xfffc7000, 0x18), | |
| 205 | + DEFINE_RES_IRQ(gic_iid(0x5f)), | |
| 206 | + /* HSPI1 */ | |
| 207 | + DEFINE_RES_MEM(0xfffc8000, 0x18), | |
| 208 | + DEFINE_RES_IRQ(gic_iid(0x74)), | |
| 209 | + /* HSPI2 */ | |
| 210 | + DEFINE_RES_MEM(0xfffc6000, 0x18), | |
| 211 | + DEFINE_RES_IRQ(gic_iid(0x75)), | |
| 212 | +}; | |
| 213 | + | |
| 214 | +void __init r8a7778_add_hspi_device(int id) | |
| 215 | +{ | |
| 216 | + BUG_ON(id < 0 || id > 2); | |
| 217 | + | |
| 218 | + platform_device_register_simple( | |
| 219 | + "sh-hspi", id, | |
| 220 | + hspi_resources + (2 * id), 2); | |
| 221 | +} | |
| 222 | + | |
| 223 | +/* MMC */ | |
| 224 | +static struct resource mmc_resources[] __initdata = { | |
| 225 | + DEFINE_RES_MEM(0xffe4e000, 0x100), | |
| 226 | + DEFINE_RES_IRQ(gic_iid(0x5d)), | |
| 227 | +}; | |
| 228 | + | |
| 229 | +void __init r8a7778_add_mmc_device(struct sh_mmcif_plat_data *info) | |
| 230 | +{ | |
| 231 | + platform_device_register_resndata( | |
| 232 | + &platform_bus, "sh_mmcif", -1, | |
| 233 | + mmc_resources, ARRAY_SIZE(mmc_resources), | |
| 234 | + info, sizeof(*info)); | |
| 235 | +} | |
| 236 | + | |
| 176 | 237 | void __init r8a7778_add_standard_devices(void) |
| 177 | 238 | { |
| 178 | 239 | int i; |
| @@ -432,7 +432,7 @@ void __init r8a7779_add_standard_devices(void) · 431 unmodified lines | ||
| 432 | 432 | |
| 433 | 433 | void __init r8a7779_add_ether_device(struct sh_eth_plat_data *pdata) |
| 434 | 434 | { |
| 435 | − platform_device_register_resndata(&platform_bus, "sh_eth", -1, | |
| 435 | + platform_device_register_resndata(&platform_bus, "r8a777x-ether", -1, | |
| 436 | 436 | ether_resources, |
| 437 | 437 | ARRAY_SIZE(ether_resources), |
| 438 | 438 | pdata, sizeof(*pdata)); |