1/* 2 * KZM-A9-GT board support 3 * 4 * Copyright (C) 2012 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; version 2 of the License. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 */ 15 16#include <linux/delay.h> 17#include <linux/gpio.h> 18#include <linux/gpio_keys.h> 19#include <linux/io.h> 20#include <linux/irq.h> 21#include <linux/i2c.h> 22#include <linux/i2c/pcf857x.h> 23#include <linux/input.h> 24#include <linux/irqchip/arm-gic.h> 25#include <linux/mmc/host.h> 26#include <linux/mmc/sh_mmcif.h> 27#include <linux/mmc/sh_mobile_sdhi.h> 28#include <linux/mfd/as3711.h> 29#include <linux/mfd/tmio.h> 30#include <linux/pinctrl/machine.h> 31#include <linux/pinctrl/pinconf-generic.h> 32#include <linux/platform_device.h> 33#include <linux/reboot.h> 34#include <linux/regulator/fixed.h> 35#include <linux/regulator/machine.h> 36#include <linux/smsc911x.h> 37#include <linux/usb/r8a66597.h> 38#include <linux/usb/renesas_usbhs.h> 39#include <linux/videodev2.h> 40 41#include <sound/sh_fsi.h> 42#include <sound/simple_card.h> 43#include <asm/hardware/cache-l2x0.h> 44#include <asm/mach-types.h> 45#include <asm/mach/arch.h> 46#include <video/sh_mobile_lcdc.h> 47 48#include "common.h" 49#include "intc.h" 50#include "irqs.h" 51#include "sh73a0.h" 52 53/* 54 * external GPIO 55 */ 56#define GPIO_PCF8575_BASE (310) 57#define GPIO_PCF8575_PORT10 (GPIO_PCF8575_BASE + 8) 58#define GPIO_PCF8575_PORT11 (GPIO_PCF8575_BASE + 9) 59#define GPIO_PCF8575_PORT12 (GPIO_PCF8575_BASE + 10) 60#define GPIO_PCF8575_PORT13 (GPIO_PCF8575_BASE + 11) 61#define GPIO_PCF8575_PORT14 (GPIO_PCF8575_BASE + 12) 62#define GPIO_PCF8575_PORT15 (GPIO_PCF8575_BASE + 13) 63#define GPIO_PCF8575_PORT16 (GPIO_PCF8575_BASE + 14) 64 65/* Dummy supplies, where voltage doesn't matter */ 66static struct regulator_consumer_supply dummy_supplies[] = { 67 REGULATOR_SUPPLY("vddvario", "smsc911x.0"), 68 REGULATOR_SUPPLY("vdd33a", "smsc911x.0"), 69}; 70 71/* 72 * FSI-AK4648 73 * 74 * this command is required when playback. 75 * 76 * # amixer set "LINEOUT Mixer DACL" on 77 */ 78 79/* SMSC 9221 */ 80static struct resource smsc9221_resources[] = { 81 [0] = { 82 .start = 0x10000000, /* CS4 */ 83 .end = 0x100000ff, 84 .flags = IORESOURCE_MEM, 85 }, 86 [1] = { 87 .start = irq_pin(3), /* IRQ3 */ 88 .flags = IORESOURCE_IRQ, 89 }, 90}; 91 92static struct smsc911x_platform_config smsc9221_platdata = { 93 .flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS, 94 .phy_interface = PHY_INTERFACE_MODE_MII, 95 .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, 96 .irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL, 97}; 98 99static struct platform_device smsc_device = { 100 .name = "smsc911x", 101 .dev = { 102 .platform_data = &smsc9221_platdata, 103 }, 104 .resource = smsc9221_resources, 105 .num_resources = ARRAY_SIZE(smsc9221_resources), 106}; 107 108/* USB external chip */ 109static struct r8a66597_platdata usb_host_data = { 110 .on_chip = 0, 111 .xtal = R8A66597_PLATDATA_XTAL_48MHZ, 112}; 113 114static struct resource usb_resources[] = { 115 [0] = { 116 .start = 0x10010000, 117 .end = 0x1001ffff - 1, 118 .flags = IORESOURCE_MEM, 119 }, 120 [1] = { 121 .start = irq_pin(1), /* IRQ1 */ 122 .flags = IORESOURCE_IRQ, 123 }, 124}; 125 126static struct platform_device usb_host_device = { 127 .name = "r8a66597_hcd", 128 .dev = { 129 .platform_data = &usb_host_data, 130 .dma_mask = NULL, 131 .coherent_dma_mask = 0xffffffff, 132 }, 133 .num_resources = ARRAY_SIZE(usb_resources), 134 .resource = usb_resources, 135}; 136 137/* USB Func CN17 */ 138struct usbhs_private { 139 void __iomem *phy; 140 void __iomem *cr2; 141 struct renesas_usbhs_platform_info info; 142}; 143 144#define IRQ15 irq_pin(15) 145#define USB_PHY_MODE (1 << 4) 146#define USB_PHY_INT_EN ((1 << 3) | (1 << 2)) 147#define USB_PHY_ON (1 << 1) 148#define USB_PHY_OFF (1 << 0) 149#define USB_PHY_INT_CLR (USB_PHY_ON | USB_PHY_OFF) 150 151#define usbhs_get_priv(pdev) \ 152 container_of(renesas_usbhs_get_info(pdev), struct usbhs_private, info) 153 154static int usbhs_get_vbus(struct platform_device *pdev) 155{ 156 struct usbhs_private *priv = usbhs_get_priv(pdev); 157 158 return !((1 << 7) & __raw_readw(priv->cr2)); 159} 160 161static int usbhs_phy_reset(struct platform_device *pdev) 162{ 163 struct usbhs_private *priv = usbhs_get_priv(pdev); 164 165 /* init phy */ 166 __raw_writew(0x8a0a, priv->cr2); 167 168 return 0; 169} 170 171static int usbhs_get_id(struct platform_device *pdev) 172{ 173 return USBHS_GADGET; 174} 175 176static irqreturn_t usbhs_interrupt(int irq, void *data) 177{ 178 struct platform_device *pdev = data; 179 struct usbhs_private *priv = usbhs_get_priv(pdev); 180 181 renesas_usbhs_call_notify_hotplug(pdev); 182 183 /* clear status */ 184 __raw_writew(__raw_readw(priv->phy) | USB_PHY_INT_CLR, priv->phy); 185 186 return IRQ_HANDLED; 187} 188 189static int usbhs_hardware_init(struct platform_device *pdev) 190{ 191 struct usbhs_private *priv = usbhs_get_priv(pdev); 192 int ret; 193 194 /* clear interrupt status */ 195 __raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->phy); 196 197 ret = request_irq(IRQ15, usbhs_interrupt, IRQF_TRIGGER_HIGH, 198 dev_name(&pdev->dev), pdev); 199 if (ret) { 200 dev_err(&pdev->dev, "request_irq err\n"); 201 return ret; 202 } 203 204 /* enable USB phy interrupt */ 205 __raw_writew(USB_PHY_MODE | USB_PHY_INT_EN, priv->phy); 206 207 return 0; 208} 209 210static int usbhs_hardware_exit(struct platform_device *pdev) 211{ 212 struct usbhs_private *priv = usbhs_get_priv(pdev); 213 214 /* clear interrupt status */ 215 __raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->phy); 216 217 free_irq(IRQ15, pdev); 218 219 return 0; 220} 221 222static u32 usbhs_pipe_cfg[] = { 223 USB_ENDPOINT_XFER_CONTROL, 224 USB_ENDPOINT_XFER_ISOC, 225 USB_ENDPOINT_XFER_ISOC, 226 USB_ENDPOINT_XFER_BULK, 227 USB_ENDPOINT_XFER_BULK, 228 USB_ENDPOINT_XFER_BULK, 229 USB_ENDPOINT_XFER_INT, 230 USB_ENDPOINT_XFER_INT, 231 USB_ENDPOINT_XFER_INT, 232 USB_ENDPOINT_XFER_BULK, 233 USB_ENDPOINT_XFER_BULK, 234 USB_ENDPOINT_XFER_BULK, 235 USB_ENDPOINT_XFER_BULK, 236 USB_ENDPOINT_XFER_BULK, 237 USB_ENDPOINT_XFER_BULK, 238 USB_ENDPOINT_XFER_BULK, 239}; 240 241static struct usbhs_private usbhs_private = { 242 .phy = IOMEM(0xe60781e0), /* USBPHYINT */ 243 .cr2 = IOMEM(0xe605810c), /* USBCR2 */ 244 .info = { 245 .platform_callback = { 246 .hardware_init = usbhs_hardware_init, 247 .hardware_exit = usbhs_hardware_exit, 248 .get_id = usbhs_get_id, 249 .phy_reset = usbhs_phy_reset, 250 .get_vbus = usbhs_get_vbus, 251 }, 252 .driver_param = { 253 .buswait_bwait = 4, 254 .has_otg = 1, 255 .pipe_type = usbhs_pipe_cfg, 256 .pipe_size = ARRAY_SIZE(usbhs_pipe_cfg), 257 }, 258 }, 259}; 260 261static struct resource usbhs_resources[] = { 262 [0] = { 263 .start = 0xE6890000, 264 .end = 0xE68900e6 - 1, 265 .flags = IORESOURCE_MEM, 266 }, 267 [1] = { 268 .start = gic_spi(62), 269 .end = gic_spi(62), 270 .flags = IORESOURCE_IRQ, 271 }, 272}; 273 274static struct platform_device usbhs_device = { 275 .name = "renesas_usbhs", 276 .id = -1, 277 .dev = { 278 .dma_mask = NULL, 279 .coherent_dma_mask = 0xffffffff, 280 .platform_data = &usbhs_private.info, 281 }, 282 .num_resources = ARRAY_SIZE(usbhs_resources), 283 .resource = usbhs_resources, 284}; 285 286/* LCDC */ 287static struct fb_videomode kzm_lcdc_mode = { 288 .name = "WVGA Panel", 289 .xres = 800, 290 .yres = 480, 291 .left_margin = 220, 292 .right_margin = 110, 293 .hsync_len = 70, 294 .upper_margin = 20, 295 .lower_margin = 5, 296 .vsync_len = 5, 297 .sync = 0, 298}; 299 300static struct sh_mobile_lcdc_info lcdc_info = { 301 .clock_source = LCDC_CLK_BUS, 302 .ch[0] = { 303 .chan = LCDC_CHAN_MAINLCD, 304 .fourcc = V4L2_PIX_FMT_RGB565, 305 .interface_type = RGB24, 306 .lcd_modes = &kzm_lcdc_mode, 307 .num_modes = 1, 308 .clock_divider = 5, 309 .flags = 0, 310 .panel_cfg = { 311 .width = 152, 312 .height = 91, 313 }, 314 } 315}; 316 317static struct resource lcdc_resources[] = { 318 [0] = { 319 .name = "LCDC", 320 .start = 0xfe940000, 321 .end = 0xfe943fff, 322 .flags = IORESOURCE_MEM, 323 }, 324 [1] = { 325 .start = intcs_evt2irq(0x580), 326 .flags = IORESOURCE_IRQ, 327 }, 328}; 329 330static struct platform_device lcdc_device = { 331 .name = "sh_mobile_lcdc_fb", 332 .num_resources = ARRAY_SIZE(lcdc_resources), 333 .resource = lcdc_resources, 334 .dev = { 335 .platform_data = &lcdc_info, 336 .coherent_dma_mask = DMA_BIT_MASK(32), 337 }, 338}; 339 340/* Fixed 1.8V regulator to be used by MMCIF */ 341static struct regulator_consumer_supply fixed1v8_power_consumers[] = 342{ 343 REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"), 344 REGULATOR_SUPPLY("vqmmc", "sh_mmcif.0"), 345}; 346 347/* MMCIF */ 348static struct resource sh_mmcif_resources[] = { 349 [0] = { 350 .name = "MMCIF", 351 .start = 0xe6bd0000, 352 .end = 0xe6bd00ff, 353 .flags = IORESOURCE_MEM, 354 }, 355 [1] = { 356 .start = gic_spi(140), 357 .flags = IORESOURCE_IRQ, 358 }, 359 [2] = { 360 .start = gic_spi(141), 361 .flags = IORESOURCE_IRQ, 362 }, 363}; 364 365static struct sh_mmcif_plat_data sh_mmcif_platdata = { 366 .ocr = MMC_VDD_165_195, 367 .caps = MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE, 368 .ccs_unsupported = true, 369 .slave_id_tx = SHDMA_SLAVE_MMCIF_TX, 370 .slave_id_rx = SHDMA_SLAVE_MMCIF_RX, 371}; 372 373static struct platform_device mmc_device = { 374 .name = "sh_mmcif", 375 .dev = { 376 .dma_mask = NULL, 377 .coherent_dma_mask = 0xffffffff, 378 .platform_data = &sh_mmcif_platdata, 379 }, 380 .num_resources = ARRAY_SIZE(sh_mmcif_resources), 381 .resource = sh_mmcif_resources, 382}; 383 384/* Fixed 3.3V regulators to be used by SDHI0 */ 385static struct regulator_consumer_supply vcc_sdhi0_consumers[] = 386{ 387 REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"), 388}; 389 390static struct regulator_init_data vcc_sdhi0_init_data = { 391 .constraints = { 392 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 393 }, 394 .num_consumer_supplies = ARRAY_SIZE(vcc_sdhi0_consumers), 395 .consumer_supplies = vcc_sdhi0_consumers, 396}; 397 398static struct fixed_voltage_config vcc_sdhi0_info = { 399 .supply_name = "SDHI0 Vcc", 400 .microvolts = 3300000, 401 .gpio = 15, 402 .enable_high = 1, 403 .init_data = &vcc_sdhi0_init_data, 404}; 405 406static struct platform_device vcc_sdhi0 = { 407 .name = "reg-fixed-voltage", 408 .id = 0, 409 .dev = { 410 .platform_data = &vcc_sdhi0_info, 411 }, 412}; 413 414/* Fixed 3.3V regulators to be used by SDHI2 */ 415static struct regulator_consumer_supply vcc_sdhi2_consumers[] = 416{ 417 REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.2"), 418}; 419 420static struct regulator_init_data vcc_sdhi2_init_data = { 421 .constraints = { 422 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 423 }, 424 .num_consumer_supplies = ARRAY_SIZE(vcc_sdhi2_consumers), 425 .consumer_supplies = vcc_sdhi2_consumers, 426}; 427 428static struct fixed_voltage_config vcc_sdhi2_info = { 429 .supply_name = "SDHI2 Vcc", 430 .microvolts = 3300000, 431 .gpio = 14, 432 .enable_high = 1, 433 .init_data = &vcc_sdhi2_init_data, 434}; 435 436static struct platform_device vcc_sdhi2 = { 437 .name = "reg-fixed-voltage", 438 .id = 1, 439 .dev = { 440 .platform_data = &vcc_sdhi2_info, 441 }, 442}; 443 444/* SDHI */ 445static struct tmio_mmc_data sdhi0_info = { 446 .chan_priv_tx = (void *)SHDMA_SLAVE_SDHI0_TX, 447 .chan_priv_rx = (void *)SHDMA_SLAVE_SDHI0_RX, 448 .flags = TMIO_MMC_HAS_IDLE_WAIT, 449 .capabilities = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | 450 MMC_CAP_POWER_OFF_CARD, 451}; 452 453static struct resource sdhi0_resources[] = { 454 [0] = { 455 .name = "SDHI0", 456 .start = 0xee100000, 457 .end = 0xee1000ff, 458 .flags = IORESOURCE_MEM, 459 }, 460 [1] = { 461 .name = SH_MOBILE_SDHI_IRQ_CARD_DETECT, 462 .start = gic_spi(83), 463 .flags = IORESOURCE_IRQ, 464 }, 465 [2] = { 466 .name = SH_MOBILE_SDHI_IRQ_SDCARD, 467 .start = gic_spi(84), 468 .flags = IORESOURCE_IRQ, 469 }, 470 [3] = { 471 .name = SH_MOBILE_SDHI_IRQ_SDIO, 472 .start = gic_spi(85), 473 .flags = IORESOURCE_IRQ, 474 }, 475}; 476 477static struct platform_device sdhi0_device = { 478 .name = "sh_mobile_sdhi", 479 .num_resources = ARRAY_SIZE(sdhi0_resources), 480 .resource = sdhi0_resources, 481 .dev = { 482 .platform_data = &sdhi0_info, 483 }, 484}; 485 486/* Micro SD */ 487static struct tmio_mmc_data sdhi2_info = { 488 .chan_priv_tx = (void *)SHDMA_SLAVE_SDHI2_TX, 489 .chan_priv_rx = (void *)SHDMA_SLAVE_SDHI2_RX, 490 .flags = TMIO_MMC_HAS_IDLE_WAIT | 491 TMIO_MMC_USE_GPIO_CD | 492 TMIO_MMC_WRPROTECT_DISABLE, 493 .capabilities = MMC_CAP_SD_HIGHSPEED | MMC_CAP_POWER_OFF_CARD, 494 .cd_gpio = 13, 495}; 496 497static struct resource sdhi2_resources[] = { 498 [0] = { 499 .name = "SDHI2", 500 .start = 0xee140000, 501 .end = 0xee1400ff, 502 .flags = IORESOURCE_MEM, 503 }, 504 [1] = { 505 .name = SH_MOBILE_SDHI_IRQ_CARD_DETECT, 506 .start = gic_spi(103), 507 .flags = IORESOURCE_IRQ, 508 }, 509 [2] = { 510 .name = SH_MOBILE_SDHI_IRQ_SDCARD, 511 .start = gic_spi(104), 512 .flags = IORESOURCE_IRQ, 513 }, 514 [3] = { 515 .name = SH_MOBILE_SDHI_IRQ_SDIO, 516 .start = gic_spi(105), 517 .flags = IORESOURCE_IRQ, 518 }, 519}; 520 521static struct platform_device sdhi2_device = { 522 .name = "sh_mobile_sdhi", 523 .id = 2, 524 .num_resources = ARRAY_SIZE(sdhi2_resources), 525 .resource = sdhi2_resources, 526 .dev = { 527 .platform_data = &sdhi2_info, 528 }, 529}; 530 531/* KEY */ 532#define GPIO_KEY(c, g, d) { .code = c, .gpio = g, .desc = d, .active_low = 1 } 533 534static struct gpio_keys_button gpio_buttons[] = { 535 GPIO_KEY(KEY_BACK, GPIO_PCF8575_PORT10, "SW3"), 536 GPIO_KEY(KEY_RIGHT, GPIO_PCF8575_PORT11, "SW2-R"), 537 GPIO_KEY(KEY_LEFT, GPIO_PCF8575_PORT12, "SW2-L"), 538 GPIO_KEY(KEY_ENTER, GPIO_PCF8575_PORT13, "SW2-P"), 539 GPIO_KEY(KEY_UP, GPIO_PCF8575_PORT14, "SW2-U"), 540 GPIO_KEY(KEY_DOWN, GPIO_PCF8575_PORT15, "SW2-D"), 541 GPIO_KEY(KEY_HOME, GPIO_PCF8575_PORT16, "SW1"), 542}; 543 544static struct gpio_keys_platform_data gpio_key_info = { 545 .buttons = gpio_buttons, 546 .nbuttons = ARRAY_SIZE(gpio_buttons), 547}; 548 549static struct platform_device gpio_keys_device = { 550 .name = "gpio-keys", 551 .dev = { 552 .platform_data = &gpio_key_info, 553 }, 554}; 555 556/* FSI-AK4648 */ 557static struct sh_fsi_platform_info fsi_info = { 558 .port_a = { 559 .tx_id = SHDMA_SLAVE_FSI2A_TX, 560 }, 561}; 562 563static struct resource fsi_resources[] = { 564 [0] = { 565 .name = "FSI", 566 .start = 0xEC230000, 567 .end = 0xEC230400 - 1, 568 .flags = IORESOURCE_MEM, 569 }, 570 [1] = { 571 .start = gic_spi(146), 572 .flags = IORESOURCE_IRQ, 573 }, 574}; 575 576static struct platform_device fsi_device = { 577 .name = "sh_fsi2", 578 .id = -1, 579 .num_resources = ARRAY_SIZE(fsi_resources), 580 .resource = fsi_resources, 581 .dev = { 582 .platform_data = &fsi_info, 583 }, 584}; 585 586static struct asoc_simple_card_info fsi2_ak4648_info = { 587 .name = "AK4648", 588 .card = "FSI2A-AK4648", 589 .codec = "ak4642-codec.0-0012", 590 .platform = "sh_fsi2", 591 .daifmt = SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_CBM_CFM, 592 .cpu_dai = { 593 .name = "fsia-dai", 594 }, 595 .codec_dai = { 596 .name = "ak4642-hifi", 597 .sysclk = 11289600, 598 }, 599}; 600 601static struct platform_device fsi_ak4648_device = { 602 .name = "asoc-simple-card", 603 .dev = { 604 .platform_data = &fsi2_ak4648_info, 605 .coherent_dma_mask = DMA_BIT_MASK(32), 606 .dma_mask = &fsi_ak4648_device.dev.coherent_dma_mask, 607 }, 608}; 609 610/* I2C */ 611 612/* StepDown1 is used to supply 1.315V to the CPU */ 613static struct regulator_init_data as3711_sd1 = { 614 .constraints = { 615 .name = "1.315V CPU", 616 .boot_on = 1, 617 .always_on = 1, 618 .min_uV = 1315000, 619 .max_uV = 1335000, 620 }, 621}; 622 623/* StepDown2 is used to supply 1.8V to the CPU and to the board */ 624static struct regulator_init_data as3711_sd2 = { 625 .constraints = { 626 .name = "1.8V", 627 .boot_on = 1, 628 .always_on = 1, 629 .min_uV = 1800000, 630 .max_uV = 1800000, 631 }, 632}; 633 634/* 635 * StepDown3 is switched in parallel with StepDown2, seems to be off, 636 * according to read-back pre-set register values 637 */ 638 639/* StepDown4 is used to supply 1.215V to the CPU and to the board */ 640static struct regulator_init_data as3711_sd4 = { 641 .constraints = { 642 .name = "1.215V", 643 .boot_on = 1, 644 .always_on = 1, 645 .min_uV = 1215000, 646 .max_uV = 1235000, 647 }, 648}; 649 650/* LDO1 is unused and unconnected */ 651 652/* LDO2 is used to supply 2.8V to the CPU */ 653static struct regulator_init_data as3711_ldo2 = { 654 .constraints = { 655 .name = "2.8V CPU", 656 .boot_on = 1, 657 .always_on = 1, 658 .min_uV = 2800000, 659 .max_uV = 2800000, 660 }, 661}; 662 663/* LDO3 is used to supply 3.0V to the CPU */ 664static struct regulator_init_data as3711_ldo3 = { 665 .constraints = { 666 .name = "3.0V CPU", 667 .boot_on = 1, 668 .always_on = 1, 669 .min_uV = 3000000, 670 .max_uV = 3000000, 671 }, 672}; 673 674/* LDO4 is used to supply 2.8V to the board */ 675static struct regulator_init_data as3711_ldo4 = { 676 .constraints = { 677 .name = "2.8V", 678 .boot_on = 1, 679 .always_on = 1, 680 .min_uV = 2800000, 681 .max_uV = 2800000, 682 }, 683}; 684 685/* LDO5 is switched parallel to LDO4, also set to 2.8V */ 686static struct regulator_init_data as3711_ldo5 = { 687 .constraints = { 688 .name = "2.8V #2", 689 .boot_on = 1, 690 .always_on = 1, 691 .min_uV = 2800000, 692 .max_uV = 2800000, 693 }, 694}; 695 696/* LDO6 is unused and unconnected */ 697 698/* LDO7 is used to supply 1.15V to the CPU */ 699static struct regulator_init_data as3711_ldo7 = { 700 .constraints = { 701 .name = "1.15V CPU", 702 .boot_on = 1, 703 .always_on = 1, 704 .min_uV = 1150000, 705 .max_uV = 1150000, 706 }, 707}; 708 709/* LDO8 is switched parallel to LDO7, also set to 1.15V */ 710static struct regulator_init_data as3711_ldo8 = { 711 .constraints = { 712 .name = "1.15V CPU #2", 713 .boot_on = 1, 714 .always_on = 1, 715 .min_uV = 1150000, 716 .max_uV = 1150000, 717 }, 718}; 719 720static struct as3711_platform_data as3711_pdata = { 721 .regulator = { 722 .init_data = { 723 [AS3711_REGULATOR_SD_1] = &as3711_sd1, 724 [AS3711_REGULATOR_SD_2] = &as3711_sd2, 725 [AS3711_REGULATOR_SD_4] = &as3711_sd4, 726 [AS3711_REGULATOR_LDO_2] = &as3711_ldo2, 727 [AS3711_REGULATOR_LDO_3] = &as3711_ldo3, 728 [AS3711_REGULATOR_LDO_4] = &as3711_ldo4, 729 [AS3711_REGULATOR_LDO_5] = &as3711_ldo5, 730 [AS3711_REGULATOR_LDO_7] = &as3711_ldo7, 731 [AS3711_REGULATOR_LDO_8] = &as3711_ldo8, 732 }, 733 }, 734 .backlight = { 735 .su2_fb = "sh_mobile_lcdc_fb.0", 736 .su2_max_uA = 36000, 737 .su2_feedback = AS3711_SU2_CURR_AUTO, 738 .su2_fbprot = AS3711_SU2_GPIO4, 739 .su2_auto_curr1 = true, 740 .su2_auto_curr2 = true, 741 .su2_auto_curr3 = true, 742 }, 743}; 744 745static struct pcf857x_platform_data pcf8575_pdata = { 746 .gpio_base = GPIO_PCF8575_BASE, 747}; 748 749static struct i2c_board_info i2c0_devices[] = { 750 { 751 I2C_BOARD_INFO("ak4648", 0x12), 752 }, 753 { 754 I2C_BOARD_INFO("r2025sd", 0x32), 755 }, 756 { 757 I2C_BOARD_INFO("ak8975", 0x0c), 758 .irq = irq_pin(28), /* IRQ28 */ 759 }, 760 { 761 I2C_BOARD_INFO("adxl34x", 0x1d), 762 .irq = irq_pin(26), /* IRQ26 */ 763 }, 764 { 765 I2C_BOARD_INFO("as3711", 0x40), 766 .irq = intcs_evt2irq(0x3300), /* IRQ24 */ 767 .platform_data = &as3711_pdata, 768 }, 769}; 770 771static struct i2c_board_info i2c1_devices[] = { 772 { 773 I2C_BOARD_INFO("st1232-ts", 0x55), 774 .irq = irq_pin(8), /* IRQ8 */ 775 }, 776}; 777 778static struct i2c_board_info i2c3_devices[] = { 779 { 780 I2C_BOARD_INFO("pcf8575", 0x20), 781 .irq = irq_pin(19), /* IRQ19 */ 782 .platform_data = &pcf8575_pdata, 783 }, 784}; 785 786static struct platform_device *kzm_devices[] __initdata = { 787 &smsc_device, 788 &usb_host_device, 789 &usbhs_device, 790 &lcdc_device, 791 &mmc_device, 792 &vcc_sdhi0, 793 &vcc_sdhi2, 794 &sdhi0_device, 795 &sdhi2_device, 796 &gpio_keys_device, 797 &fsi_device, 798 &fsi_ak4648_device, 799}; 800 801static unsigned long pin_pullup_conf[] = { 802 PIN_CONF_PACKED(PIN_CONFIG_BIAS_PULL_UP, 0), 803}; 804 805static const struct pinctrl_map kzm_pinctrl_map[] = { 806 /* FSIA (AK4648) */ 807 PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0", 808 "fsia_mclk_in", "fsia"), 809 PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0", 810 "fsia_sclk_in", "fsia"), 811 PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0", 812 "fsia_data_in", "fsia"), 813 PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0", 814 "fsia_data_out", "fsia"), 815 /* I2C3 */ 816 PIN_MAP_MUX_GROUP_DEFAULT("i2c-sh_mobile.3", "pfc-sh73a0", 817 "i2c3_1", "i2c3"), 818 /* LCD */ 819 PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh73a0", 820 "lcd_data24", "lcd"), 821 PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh73a0", 822 "lcd_sync", "lcd"), 823 /* MMCIF */ 824 PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0", 825 "mmc0_data8_0", "mmc0"), 826 PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0", 827 "mmc0_ctrl_0", "mmc0"), 828 PIN_MAP_CONFIGS_PIN_DEFAULT("sh_mmcif.0", "pfc-sh73a0", 829 "PORT279", pin_pullup_conf), 830 PIN_MAP_CONFIGS_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0", 831 "mmc0_data8_0", pin_pullup_conf), 832 /* SCIFA4 */ 833 PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "pfc-sh73a0", 834 "scifa4_data", "scifa4"), 835 PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "pfc-sh73a0", 836 "scifa4_ctrl", "scifa4"), 837 /* SDHI0 */ 838 PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", 839 "sdhi0_data4", "sdhi0"), 840 PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", 841 "sdhi0_ctrl", "sdhi0"), 842 PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", 843 "sdhi0_cd", "sdhi0"), 844 PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", 845 "sdhi0_wp", "sdhi0"), 846 /* SDHI2 */ 847 PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.2", "pfc-sh73a0", 848 "sdhi2_data4", "sdhi2"), 849 PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.2", "pfc-sh73a0", 850 "sdhi2_ctrl", "sdhi2"), 851 /* SMSC */ 852 PIN_MAP_MUX_GROUP_DEFAULT("smsc911x.0", "pfc-sh73a0", 853 "bsc_cs4", "bsc"), 854 /* USB */ 855 PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs", "pfc-sh73a0", 856 "usb_vbus", "usb"), 857}; 858 859static void __init kzm_init(void) 860{ 861 regulator_register_always_on(2, "fixed-1.8V", fixed1v8_power_consumers, 862 ARRAY_SIZE(fixed1v8_power_consumers), 1800000); 863 regulator_register_fixed(3, dummy_supplies, ARRAY_SIZE(dummy_supplies)); 864 865 pinctrl_register_mappings(kzm_pinctrl_map, ARRAY_SIZE(kzm_pinctrl_map)); 866 867 sh73a0_pinmux_init(); 868 869 /* SMSC */ 870 gpio_request_one(224, GPIOF_IN, NULL); /* IRQ3 */ 871 872 /* LCDC */ 873 gpio_request_one(222, GPIOF_OUT_INIT_HIGH, NULL); /* LCDCDON */ 874 gpio_request_one(226, GPIOF_OUT_INIT_HIGH, NULL); /* SC */ 875 876 /* Touchscreen */ 877 gpio_request_one(223, GPIOF_IN, NULL); /* IRQ8 */ 878 879#ifdef CONFIG_CACHE_L2X0 880 /* Shared attribute override enable, 64K*8way */ 881 l2x0_init(IOMEM(0xf0100000), 0x00400000, 0xc20f0fff); 882#endif 883 884 i2c_register_board_info(0, i2c0_devices, ARRAY_SIZE(i2c0_devices)); 885 i2c_register_board_info(1, i2c1_devices, ARRAY_SIZE(i2c1_devices)); 886 i2c_register_board_info(3, i2c3_devices, ARRAY_SIZE(i2c3_devices)); 887 888 sh73a0_add_standard_devices(); 889 platform_add_devices(kzm_devices, ARRAY_SIZE(kzm_devices)); 890 891 sh73a0_pm_init(); 892} 893 894static void kzm9g_restart(enum reboot_mode mode, const char *cmd) 895{ 896#define RESCNT2 IOMEM(0xe6188020) 897 /* Do soft power on reset */ 898 writel((1 << 31), RESCNT2); 899} 900 901static const char *kzm9g_boards_compat_dt[] __initdata = { 902 "renesas,kzm9g", 903 NULL, 904}; 905 906DT_MACHINE_START(KZM9G_DT, "kzm9g") 907 .smp = smp_ops(sh73a0_smp_ops), 908 .map_io = sh73a0_map_io, 909 .init_early = sh73a0_add_early_devices, 910 .init_irq = sh73a0_init_irq, 911 .init_machine = kzm_init, 912 .init_late = shmobile_init_late, 913 .init_time = sh73a0_earlytimer_init, 914 .restart = kzm9g_restart, 915 .dt_compat = kzm9g_boards_compat_dt, 916MACHINE_END 917