sh: add FSI driver support for ms7724se

Signed-off-by: Kuninori Morimoto <morimoto.kuninori@renesas.com>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>

authored by Kuninori Morimoto and committed by Paul Mundt 3e9ad52b 40258ee9

+89
+89
arch/sh/boards/mach-se/7724/setup.c
··· 22 #include <linux/usb/r8a66597.h> 23 #include <video/sh_mobile_lcdc.h> 24 #include <media/sh_mobile_ceu.h> 25 #include <asm/io.h> 26 #include <asm/heartbeat.h> 27 #include <asm/sh_eth.h> ··· 256 }, 257 }; 258 259 /* KEYSC in SoC (Needs SW33-2 set to ON) */ 260 static struct sh_keysc_info keysc_info = { 261 .mode = SH_KEYSC_MODE_1, ··· 459 &sh_eth_device, 460 &sh7724_usb0_host_device, 461 &sh7724_usb1_gadget_device, 462 }; 463 464 #define EEPROM_OP 0xBA206000 ··· 527 static int __init devices_setup(void) 528 { 529 u16 sw = ctrl_inw(SW4140); /* select camera, monitor */ 530 531 /* Reset Release */ 532 ctrl_outw(ctrl_inw(FPGA_OUT) & 533 ~((1 << 1) | /* LAN */ 534 (1 << 6) | /* VIDEO DAC */ 535 (1 << 12) | /* USB0 */ 536 (1 << 14)), /* RMII */ 537 FPGA_OUT); ··· 671 gpio_request(GPIO_FN_KEYOUT2, NULL); 672 gpio_request(GPIO_FN_KEYOUT1, NULL); 673 gpio_request(GPIO_FN_KEYOUT0, NULL); 674 675 /* 676 * enable SH-Eth
··· 22 #include <linux/usb/r8a66597.h> 23 #include <video/sh_mobile_lcdc.h> 24 #include <media/sh_mobile_ceu.h> 25 + #include <sound/sh_fsi.h> 26 #include <asm/io.h> 27 #include <asm/heartbeat.h> 28 #include <asm/sh_eth.h> ··· 255 }, 256 }; 257 258 + /* FSI */ 259 + /* 260 + * FSI-A use external clock which came from ak464x. 261 + * So, we should change parent of fsi 262 + */ 263 + #define FCLKACR 0xa4150008 264 + static void fsimck_init(struct clk *clk) 265 + { 266 + u32 status = ctrl_inl(clk->enable_reg); 267 + 268 + /* use external clock */ 269 + status &= ~0x000000ff; 270 + status |= 0x00000080; 271 + ctrl_outl(status, clk->enable_reg); 272 + } 273 + 274 + static struct clk_ops fsimck_clk_ops = { 275 + .init = fsimck_init, 276 + }; 277 + 278 + static struct clk fsimcka_clk = { 279 + .name = "fsimcka_clk", 280 + .id = -1, 281 + .ops = &fsimck_clk_ops, 282 + .enable_reg = (void __iomem *)FCLKACR, 283 + .rate = 0, /* unknown */ 284 + }; 285 + 286 + struct sh_fsi_platform_info fsi_info = { 287 + .porta_flags = SH_FSI_BRS_INV | 288 + SH_FSI_OUT_SLAVE_MODE | 289 + SH_FSI_IN_SLAVE_MODE | 290 + SH_FSI_OFMT(PCM) | 291 + SH_FSI_IFMT(PCM), 292 + }; 293 + 294 + static struct resource fsi_resources[] = { 295 + [0] = { 296 + .name = "FSI", 297 + .start = 0xFE3C0000, 298 + .end = 0xFE3C021d, 299 + .flags = IORESOURCE_MEM, 300 + }, 301 + [1] = { 302 + .start = 108, 303 + .flags = IORESOURCE_IRQ, 304 + }, 305 + }; 306 + 307 + static struct platform_device fsi_device = { 308 + .name = "sh_fsi", 309 + .id = 0, 310 + .num_resources = ARRAY_SIZE(fsi_resources), 311 + .resource = fsi_resources, 312 + .dev = { 313 + .platform_data = &fsi_info, 314 + }, 315 + }; 316 + 317 /* KEYSC in SoC (Needs SW33-2 set to ON) */ 318 static struct sh_keysc_info keysc_info = { 319 .mode = SH_KEYSC_MODE_1, ··· 399 &sh_eth_device, 400 &sh7724_usb0_host_device, 401 &sh7724_usb1_gadget_device, 402 + &fsi_device, 403 }; 404 405 #define EEPROM_OP 0xBA206000 ··· 466 static int __init devices_setup(void) 467 { 468 u16 sw = ctrl_inw(SW4140); /* select camera, monitor */ 469 + struct clk *fsia_clk; 470 471 /* Reset Release */ 472 ctrl_outw(ctrl_inw(FPGA_OUT) & 473 ~((1 << 1) | /* LAN */ 474 (1 << 6) | /* VIDEO DAC */ 475 + (1 << 7) | /* AK4643 */ 476 (1 << 12) | /* USB0 */ 477 (1 << 14)), /* RMII */ 478 FPGA_OUT); ··· 608 gpio_request(GPIO_FN_KEYOUT2, NULL); 609 gpio_request(GPIO_FN_KEYOUT1, NULL); 610 gpio_request(GPIO_FN_KEYOUT0, NULL); 611 + 612 + /* enable FSI */ 613 + gpio_request(GPIO_FN_FSIMCKB, NULL); 614 + gpio_request(GPIO_FN_FSIMCKA, NULL); 615 + gpio_request(GPIO_FN_FSIOASD, NULL); 616 + gpio_request(GPIO_FN_FSIIABCK, NULL); 617 + gpio_request(GPIO_FN_FSIIALRCK, NULL); 618 + gpio_request(GPIO_FN_FSIOABCK, NULL); 619 + gpio_request(GPIO_FN_FSIOALRCK, NULL); 620 + gpio_request(GPIO_FN_CLKAUDIOAO, NULL); 621 + gpio_request(GPIO_FN_FSIIBSD, NULL); 622 + gpio_request(GPIO_FN_FSIOBSD, NULL); 623 + gpio_request(GPIO_FN_FSIIBBCK, NULL); 624 + gpio_request(GPIO_FN_FSIIBLRCK, NULL); 625 + gpio_request(GPIO_FN_FSIOBBCK, NULL); 626 + gpio_request(GPIO_FN_FSIOBLRCK, NULL); 627 + gpio_request(GPIO_FN_CLKAUDIOBO, NULL); 628 + gpio_request(GPIO_FN_FSIIASD, NULL); 629 + 630 + /* change parent of FSI A */ 631 + fsia_clk = clk_get(NULL, "fsia_clk"); 632 + clk_register(&fsimcka_clk); 633 + clk_set_parent(fsia_clk, &fsimcka_clk); 634 + clk_set_rate(fsia_clk, 11000); 635 + clk_set_rate(&fsimcka_clk, 11000); 636 + clk_put(fsia_clk); 637 638 /* 639 * enable SH-Eth