Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: davinci: clean up platform support

With the board file support gone, and the platform using
DT only, a lot of the remaining code is no longer referenced
and can be removed.

Technically, the DT file only references DA850, but since that
is very similar to DA830, I'm leaving the latter.

Acked-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

+11 -3053
-16
arch/arm/mach-davinci/Kconfig
··· 18 18 19 19 config ARCH_DAVINCI_DA830 20 20 bool "DA830/OMAP-L137/AM17x based system" 21 - depends on AUTO_ZRELADDR && ARM_PATCH_PHYS_VIRT 22 - depends on ATAGS 23 21 select ARCH_DAVINCI_DA8XX 24 22 # needed on silicon revs 1.0, 1.1: 25 23 select CPU_DCACHE_WRITETHROUGH if !CPU_DCACHE_DISABLE ··· 25 27 26 28 config ARCH_DAVINCI_DA850 27 29 bool "DA850/OMAP-L138/AM18x based system" 28 - depends on AUTO_ZRELADDR && ARM_PATCH_PHYS_VIRT 29 - depends on ATAGS 30 - select ARCH_DAVINCI_DA8XX 31 30 select DAVINCI_CP_INTC 32 31 33 32 config ARCH_DAVINCI_DA8XX 34 33 bool 35 - 36 - comment "DaVinci Board Type" 37 - 38 - config MACH_DA8XX_DT 39 - bool "Support DA8XX platforms using device tree" 40 - default y 41 - depends on ARCH_DAVINCI_DA850 42 - select PINCTRL 43 - help 44 - Say y here to include support for TI DaVinci DA850 based using 45 - Flattened Device Tree. More information at Documentation/devicetree 46 34 47 35 config DAVINCI_MUX 48 36 bool "DAVINCI multiplexing support"
+4 -5
arch/arm/mach-davinci/Makefile
··· 5 5 # 6 6 # 7 7 # Common objects 8 - obj-y := serial.o usb.o common.o sram.o 8 + obj-y := common.o sram.o devices-da8xx.o 9 9 10 10 obj-$(CONFIG_DAVINCI_MUX) += mux.o 11 11 12 12 # Chip specific 13 - obj-$(CONFIG_ARCH_DAVINCI_DA830) += da830.o devices-da8xx.o usb-da8xx.o 14 - obj-$(CONFIG_ARCH_DAVINCI_DA850) += da850.o devices-da8xx.o usb-da8xx.o 13 + obj-$(CONFIG_ARCH_DAVINCI_DA830) += da830.o 14 + obj-$(CONFIG_ARCH_DAVINCI_DA850) += da850.o pdata-quirks.o 15 15 16 - # Board specific 17 - obj-$(CONFIG_MACH_DA8XX_DT) += da8xx-dt.o pdata-quirks.o 16 + obj-y += da8xx-dt.o 18 17 19 18 # Power Management 20 19 obj-$(CONFIG_CPU_IDLE) += cpuidle.o
-57
arch/arm/mach-davinci/asp.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0 */ 2 - /* 3 - * TI DaVinci Audio definitions 4 - */ 5 - #ifndef __ASM_ARCH_DAVINCI_ASP_H 6 - #define __ASM_ARCH_DAVINCI_ASP_H 7 - 8 - /* Bases of dm644x and dm355 register banks */ 9 - #define DAVINCI_ASP0_BASE 0x01E02000 10 - #define DAVINCI_ASP1_BASE 0x01E04000 11 - 12 - /* Bases of dm365 register banks */ 13 - #define DAVINCI_DM365_ASP0_BASE 0x01D02000 14 - 15 - /* Bases of dm646x register banks */ 16 - #define DAVINCI_DM646X_MCASP0_REG_BASE 0x01D01000 17 - #define DAVINCI_DM646X_MCASP1_REG_BASE 0x01D01800 18 - 19 - /* Bases of da850/da830 McASP0 register banks */ 20 - #define DAVINCI_DA8XX_MCASP0_REG_BASE 0x01D00000 21 - 22 - /* Bases of da830 McASP1 register banks */ 23 - #define DAVINCI_DA830_MCASP1_REG_BASE 0x01D04000 24 - 25 - /* Bases of da830 McASP2 register banks */ 26 - #define DAVINCI_DA830_MCASP2_REG_BASE 0x01D08000 27 - 28 - /* EDMA channels of dm644x and dm355 */ 29 - #define DAVINCI_DMA_ASP0_TX 2 30 - #define DAVINCI_DMA_ASP0_RX 3 31 - #define DAVINCI_DMA_ASP1_TX 8 32 - #define DAVINCI_DMA_ASP1_RX 9 33 - 34 - /* EDMA channels of dm646x */ 35 - #define DAVINCI_DM646X_DMA_MCASP0_AXEVT0 6 36 - #define DAVINCI_DM646X_DMA_MCASP0_AREVT0 9 37 - #define DAVINCI_DM646X_DMA_MCASP1_AXEVT1 12 38 - 39 - /* EDMA channels of da850/da830 McASP0 */ 40 - #define DAVINCI_DA8XX_DMA_MCASP0_AREVT 0 41 - #define DAVINCI_DA8XX_DMA_MCASP0_AXEVT 1 42 - 43 - /* EDMA channels of da830 McASP1 */ 44 - #define DAVINCI_DA830_DMA_MCASP1_AREVT 2 45 - #define DAVINCI_DA830_DMA_MCASP1_AXEVT 3 46 - 47 - /* EDMA channels of da830 McASP2 */ 48 - #define DAVINCI_DA830_DMA_MCASP2_AREVT 4 49 - #define DAVINCI_DA830_DMA_MCASP2_AXEVT 5 50 - 51 - /* Interrupts */ 52 - #define DAVINCI_ASP0_RX_INT DAVINCI_INTC_IRQ(IRQ_MBRINT) 53 - #define DAVINCI_ASP0_TX_INT DAVINCI_INTC_IRQ(IRQ_MBXINT) 54 - #define DAVINCI_ASP1_RX_INT DAVINCI_INTC_IRQ(IRQ_MBRINT) 55 - #define DAVINCI_ASP1_TX_INT DAVINCI_INTC_IRQ(IRQ_MBXINT) 56 - 57 - #endif /* __ASM_ARCH_DAVINCI_ASP_H */
+2 -5
arch/arm/mach-davinci/common.h
··· 17 17 18 18 #include <asm/irq.h> 19 19 20 - #define DAVINCI_INTC_START NR_IRQS 21 - #define DAVINCI_INTC_IRQ(_irqnum) (DAVINCI_INTC_START + (_irqnum)) 20 + #define DAVINCI_INTC_START NR_IRQS 21 + #define DAVINCI_INTC_IRQ(_irqnum) (DAVINCI_INTC_START + (_irqnum)) 22 22 23 23 struct davinci_gpio_controller; 24 24 ··· 45 45 unsigned gpio_num; 46 46 unsigned gpio_irq; 47 47 unsigned gpio_unbanked; 48 - struct davinci_gpio_controller *gpio_ctlrs; 49 - int gpio_ctlrs_num; 50 - struct emac_platform_data *emac_pdata; 51 48 dma_addr_t sram_dma; 52 49 unsigned sram_len; 53 50 };
-21
arch/arm/mach-davinci/cputype.h
··· 28 28 #define DAVINCI_CPU_ID_DA830 0x08300000 29 29 #define DAVINCI_CPU_ID_DA850 0x08500000 30 30 31 - #define IS_DAVINCI_CPU(type, id) \ 32 - static inline int is_davinci_ ##type(void) \ 33 - { \ 34 - return (davinci_soc_info.cpu_id == (id)); \ 35 - } 36 - 37 - IS_DAVINCI_CPU(da830, DAVINCI_CPU_ID_DA830) 38 - IS_DAVINCI_CPU(da850, DAVINCI_CPU_ID_DA850) 39 - 40 - #ifdef CONFIG_ARCH_DAVINCI_DA830 41 - #define cpu_is_davinci_da830() is_davinci_da830() 42 - #else 43 - #define cpu_is_davinci_da830() 0 44 - #endif 45 - 46 - #ifdef CONFIG_ARCH_DAVINCI_DA850 47 - #define cpu_is_davinci_da850() is_davinci_da850() 48 - #else 49 - #define cpu_is_davinci_da850() 0 50 - #endif 51 - 52 31 #endif
-274
arch/arm/mach-davinci/da830.c
··· 12 12 #include <linux/init.h> 13 13 #include <linux/io.h> 14 14 #include <linux/irqchip/irq-davinci-cp-intc.h> 15 - #include <linux/platform_data/gpio-davinci.h> 16 15 17 16 #include <clocksource/timer-davinci.h> 18 17 ··· 447 448 #endif 448 449 }; 449 450 450 - const short da830_emif25_pins[] __initconst = { 451 - DA830_EMA_D_0, DA830_EMA_D_1, DA830_EMA_D_2, DA830_EMA_D_3, 452 - DA830_EMA_D_4, DA830_EMA_D_5, DA830_EMA_D_6, DA830_EMA_D_7, 453 - DA830_EMA_D_8, DA830_EMA_D_9, DA830_EMA_D_10, DA830_EMA_D_11, 454 - DA830_EMA_D_12, DA830_EMA_D_13, DA830_EMA_D_14, DA830_EMA_D_15, 455 - DA830_EMA_A_0, DA830_EMA_A_1, DA830_EMA_A_2, DA830_EMA_A_3, 456 - DA830_EMA_A_4, DA830_EMA_A_5, DA830_EMA_A_6, DA830_EMA_A_7, 457 - DA830_EMA_A_8, DA830_EMA_A_9, DA830_EMA_A_10, DA830_EMA_A_11, 458 - DA830_EMA_A_12, DA830_EMA_BA_0, DA830_EMA_BA_1, DA830_EMA_CLK, 459 - DA830_EMA_SDCKE, DA830_NEMA_CS_4, DA830_NEMA_CS_5, DA830_NEMA_WE, 460 - DA830_NEMA_CS_0, DA830_NEMA_CS_2, DA830_NEMA_CS_3, DA830_NEMA_OE, 461 - DA830_NEMA_WE_DQM_1, DA830_NEMA_WE_DQM_0, DA830_EMA_WAIT_0, 462 - -1 463 - }; 464 - 465 - const short da830_spi0_pins[] __initconst = { 466 - DA830_SPI0_SOMI_0, DA830_SPI0_SIMO_0, DA830_SPI0_CLK, DA830_NSPI0_ENA, 467 - DA830_NSPI0_SCS_0, 468 - -1 469 - }; 470 - 471 - const short da830_spi1_pins[] __initconst = { 472 - DA830_SPI1_SOMI_0, DA830_SPI1_SIMO_0, DA830_SPI1_CLK, DA830_NSPI1_ENA, 473 - DA830_NSPI1_SCS_0, 474 - -1 475 - }; 476 - 477 - const short da830_mmc_sd_pins[] __initconst = { 478 - DA830_MMCSD_DAT_0, DA830_MMCSD_DAT_1, DA830_MMCSD_DAT_2, 479 - DA830_MMCSD_DAT_3, DA830_MMCSD_DAT_4, DA830_MMCSD_DAT_5, 480 - DA830_MMCSD_DAT_6, DA830_MMCSD_DAT_7, DA830_MMCSD_CLK, 481 - DA830_MMCSD_CMD, 482 - -1 483 - }; 484 - 485 - const short da830_uart0_pins[] __initconst = { 486 - DA830_NUART0_CTS, DA830_NUART0_RTS, DA830_UART0_RXD, DA830_UART0_TXD, 487 - -1 488 - }; 489 - 490 - const short da830_uart1_pins[] __initconst = { 491 - DA830_UART1_RXD, DA830_UART1_TXD, 492 - -1 493 - }; 494 - 495 - const short da830_uart2_pins[] __initconst = { 496 - DA830_UART2_RXD, DA830_UART2_TXD, 497 - -1 498 - }; 499 - 500 - const short da830_usb20_pins[] __initconst = { 501 - DA830_USB0_DRVVBUS, DA830_USB_REFCLKIN, 502 - -1 503 - }; 504 - 505 - const short da830_usb11_pins[] __initconst = { 506 - DA830_USB_REFCLKIN, 507 - -1 508 - }; 509 - 510 - const short da830_uhpi_pins[] __initconst = { 511 - DA830_UHPI_HD_0, DA830_UHPI_HD_1, DA830_UHPI_HD_2, DA830_UHPI_HD_3, 512 - DA830_UHPI_HD_4, DA830_UHPI_HD_5, DA830_UHPI_HD_6, DA830_UHPI_HD_7, 513 - DA830_UHPI_HD_8, DA830_UHPI_HD_9, DA830_UHPI_HD_10, DA830_UHPI_HD_11, 514 - DA830_UHPI_HD_12, DA830_UHPI_HD_13, DA830_UHPI_HD_14, DA830_UHPI_HD_15, 515 - DA830_UHPI_HCNTL0, DA830_UHPI_HCNTL1, DA830_UHPI_HHWIL, DA830_UHPI_HRNW, 516 - DA830_NUHPI_HAS, DA830_NUHPI_HCS, DA830_NUHPI_HDS1, DA830_NUHPI_HDS2, 517 - DA830_NUHPI_HINT, DA830_NUHPI_HRDY, 518 - -1 519 - }; 520 - 521 - const short da830_cpgmac_pins[] __initconst = { 522 - DA830_RMII_TXD_0, DA830_RMII_TXD_1, DA830_RMII_TXEN, DA830_RMII_CRS_DV, 523 - DA830_RMII_RXD_0, DA830_RMII_RXD_1, DA830_RMII_RXER, DA830_MDIO_CLK, 524 - DA830_MDIO_D, 525 - -1 526 - }; 527 - 528 - const short da830_emif3c_pins[] __initconst = { 529 - DA830_EMB_SDCKE, DA830_EMB_CLK_GLUE, DA830_EMB_CLK, DA830_NEMB_CS_0, 530 - DA830_NEMB_CAS, DA830_NEMB_RAS, DA830_NEMB_WE, DA830_EMB_BA_1, 531 - DA830_EMB_BA_0, DA830_EMB_A_0, DA830_EMB_A_1, DA830_EMB_A_2, 532 - DA830_EMB_A_3, DA830_EMB_A_4, DA830_EMB_A_5, DA830_EMB_A_6, 533 - DA830_EMB_A_7, DA830_EMB_A_8, DA830_EMB_A_9, DA830_EMB_A_10, 534 - DA830_EMB_A_11, DA830_EMB_A_12, DA830_NEMB_WE_DQM_3, 535 - DA830_NEMB_WE_DQM_2, DA830_EMB_D_0, DA830_EMB_D_1, DA830_EMB_D_2, 536 - DA830_EMB_D_3, DA830_EMB_D_4, DA830_EMB_D_5, DA830_EMB_D_6, 537 - DA830_EMB_D_7, DA830_EMB_D_8, DA830_EMB_D_9, DA830_EMB_D_10, 538 - DA830_EMB_D_11, DA830_EMB_D_12, DA830_EMB_D_13, DA830_EMB_D_14, 539 - DA830_EMB_D_15, DA830_EMB_D_16, DA830_EMB_D_17, DA830_EMB_D_18, 540 - DA830_EMB_D_19, DA830_EMB_D_20, DA830_EMB_D_21, DA830_EMB_D_22, 541 - DA830_EMB_D_23, DA830_EMB_D_24, DA830_EMB_D_25, DA830_EMB_D_26, 542 - DA830_EMB_D_27, DA830_EMB_D_28, DA830_EMB_D_29, DA830_EMB_D_30, 543 - DA830_EMB_D_31, DA830_NEMB_WE_DQM_1, DA830_NEMB_WE_DQM_0, 544 - -1 545 - }; 546 - 547 - const short da830_mcasp0_pins[] __initconst = { 548 - DA830_AHCLKX0, DA830_ACLKX0, DA830_AFSX0, 549 - DA830_AHCLKR0, DA830_ACLKR0, DA830_AFSR0, DA830_AMUTE0, 550 - DA830_AXR0_0, DA830_AXR0_1, DA830_AXR0_2, DA830_AXR0_3, 551 - DA830_AXR0_4, DA830_AXR0_5, DA830_AXR0_6, DA830_AXR0_7, 552 - DA830_AXR0_8, DA830_AXR0_9, DA830_AXR0_10, DA830_AXR0_11, 553 - DA830_AXR0_12, DA830_AXR0_13, DA830_AXR0_14, DA830_AXR0_15, 554 - -1 555 - }; 556 - 557 - const short da830_mcasp1_pins[] __initconst = { 558 - DA830_AHCLKX1, DA830_ACLKX1, DA830_AFSX1, 559 - DA830_AHCLKR1, DA830_ACLKR1, DA830_AFSR1, DA830_AMUTE1, 560 - DA830_AXR1_0, DA830_AXR1_1, DA830_AXR1_2, DA830_AXR1_3, 561 - DA830_AXR1_4, DA830_AXR1_5, DA830_AXR1_6, DA830_AXR1_7, 562 - DA830_AXR1_8, DA830_AXR1_9, DA830_AXR1_10, DA830_AXR1_11, 563 - -1 564 - }; 565 - 566 - const short da830_mcasp2_pins[] __initconst = { 567 - DA830_AHCLKX2, DA830_ACLKX2, DA830_AFSX2, 568 - DA830_AHCLKR2, DA830_ACLKR2, DA830_AFSR2, DA830_AMUTE2, 569 - DA830_AXR2_0, DA830_AXR2_1, DA830_AXR2_2, DA830_AXR2_3, 570 - -1 571 - }; 572 - 573 - const short da830_i2c0_pins[] __initconst = { 574 - DA830_I2C0_SDA, DA830_I2C0_SCL, 575 - -1 576 - }; 577 - 578 - const short da830_i2c1_pins[] __initconst = { 579 - DA830_I2C1_SCL, DA830_I2C1_SDA, 580 - -1 581 - }; 582 - 583 - const short da830_lcdcntl_pins[] __initconst = { 584 - DA830_LCD_D_0, DA830_LCD_D_1, DA830_LCD_D_2, DA830_LCD_D_3, 585 - DA830_LCD_D_4, DA830_LCD_D_5, DA830_LCD_D_6, DA830_LCD_D_7, 586 - DA830_LCD_D_8, DA830_LCD_D_9, DA830_LCD_D_10, DA830_LCD_D_11, 587 - DA830_LCD_D_12, DA830_LCD_D_13, DA830_LCD_D_14, DA830_LCD_D_15, 588 - DA830_LCD_PCLK, DA830_LCD_HSYNC, DA830_LCD_VSYNC, DA830_NLCD_AC_ENB_CS, 589 - DA830_LCD_MCLK, 590 - -1 591 - }; 592 - 593 - const short da830_pwm_pins[] __initconst = { 594 - DA830_ECAP0_APWM0, DA830_ECAP1_APWM1, DA830_EPWM0B, DA830_EPWM0A, 595 - DA830_EPWMSYNCI, DA830_EPWMSYNC0, DA830_ECAP2_APWM2, DA830_EHRPWMGLUETZ, 596 - DA830_EPWM2B, DA830_EPWM2A, DA830_EPWM1B, DA830_EPWM1A, 597 - -1 598 - }; 599 - 600 - const short da830_ecap0_pins[] __initconst = { 601 - DA830_ECAP0_APWM0, 602 - -1 603 - }; 604 - 605 - const short da830_ecap1_pins[] __initconst = { 606 - DA830_ECAP1_APWM1, 607 - -1 608 - }; 609 - 610 - const short da830_ecap2_pins[] __initconst = { 611 - DA830_ECAP2_APWM2, 612 - -1 613 - }; 614 - 615 - const short da830_eqep0_pins[] __initconst = { 616 - DA830_EQEP0I, DA830_EQEP0S, DA830_EQEP0A, DA830_EQEP0B, 617 - -1 618 - }; 619 - 620 - const short da830_eqep1_pins[] __initconst = { 621 - DA830_EQEP1I, DA830_EQEP1S, DA830_EQEP1A, DA830_EQEP1B, 622 - -1 623 - }; 624 - 625 451 static struct map_desc da830_io_desc[] = { 626 452 { 627 453 .virtual = IO_VIRT, ··· 487 663 }, 488 664 }; 489 665 490 - static struct davinci_gpio_platform_data da830_gpio_platform_data = { 491 - .no_auto_base = true, 492 - .base = 0, 493 - .ngpio = 128, 494 - }; 495 - 496 - int __init da830_register_gpio(void) 497 - { 498 - return da8xx_register_gpio(&da830_gpio_platform_data); 499 - } 500 - 501 - /* 502 - * Bottom half of timer0 is used both for clock even and clocksource. 503 - * Top half is used by DSP. 504 - */ 505 - static const struct davinci_timer_cfg da830_timer_cfg = { 506 - .reg = DEFINE_RES_IO(DA8XX_TIMER64P0_BASE, SZ_4K), 507 - .irq = { 508 - DEFINE_RES_IRQ(DAVINCI_INTC_IRQ(IRQ_DA830_T12CMPINT0_0)), 509 - DEFINE_RES_IRQ(DAVINCI_INTC_IRQ(IRQ_DA8XX_TINT12_0)), 510 - }, 511 - .cmp_off = DA830_CMP12_0, 512 - }; 513 - 514 666 static const struct davinci_soc_info davinci_soc_info_da830 = { 515 667 .io_desc = da830_io_desc, 516 668 .io_desc_num = ARRAY_SIZE(da830_io_desc), ··· 496 696 .pinmux_base = DA8XX_SYSCFG0_BASE + 0x120, 497 697 .pinmux_pins = da830_pins, 498 698 .pinmux_pins_num = ARRAY_SIZE(da830_pins), 499 - .emac_pdata = &da8xx_emac_pdata, 500 699 }; 501 700 502 701 void __init da830_init(void) ··· 504 705 505 706 da8xx_syscfg0_base = ioremap(DA8XX_SYSCFG0_BASE, SZ_4K); 506 707 WARN(!da8xx_syscfg0_base, "Unable to map syscfg0 module"); 507 - } 508 - 509 - static const struct davinci_cp_intc_config da830_cp_intc_config = { 510 - .reg = { 511 - .start = DA8XX_CP_INTC_BASE, 512 - .end = DA8XX_CP_INTC_BASE + SZ_8K - 1, 513 - .flags = IORESOURCE_MEM, 514 - }, 515 - .num_irqs = DA830_N_CP_INTC_IRQ, 516 - }; 517 - 518 - void __init da830_init_irq(void) 519 - { 520 - davinci_cp_intc_init(&da830_cp_intc_config); 521 - } 522 - 523 - void __init da830_init_time(void) 524 - { 525 - void __iomem *pll; 526 - struct clk *clk; 527 - int rv; 528 - 529 - clk_register_fixed_rate(NULL, "ref_clk", NULL, 0, DA830_REF_FREQ); 530 - 531 - pll = ioremap(DA8XX_PLL0_BASE, SZ_4K); 532 - 533 - da830_pll_init(NULL, pll, NULL); 534 - 535 - clk = clk_get(NULL, "timer0"); 536 - if (WARN_ON(IS_ERR(clk))) { 537 - pr_err("Unable to get the timer clock\n"); 538 - return; 539 - } 540 - 541 - rv = davinci_timer_register(clk, &da830_timer_cfg); 542 - WARN(rv, "Unable to register the timer: %d\n", rv); 543 - } 544 - 545 - static struct resource da830_psc0_resources[] = { 546 - { 547 - .start = DA8XX_PSC0_BASE, 548 - .end = DA8XX_PSC0_BASE + SZ_4K - 1, 549 - .flags = IORESOURCE_MEM, 550 - }, 551 - }; 552 - 553 - static struct platform_device da830_psc0_device = { 554 - .name = "da830-psc0", 555 - .id = -1, 556 - .resource = da830_psc0_resources, 557 - .num_resources = ARRAY_SIZE(da830_psc0_resources), 558 - }; 559 - 560 - static struct resource da830_psc1_resources[] = { 561 - { 562 - .start = DA8XX_PSC1_BASE, 563 - .end = DA8XX_PSC1_BASE + SZ_4K - 1, 564 - .flags = IORESOURCE_MEM, 565 - }, 566 - }; 567 - 568 - static struct platform_device da830_psc1_device = { 569 - .name = "da830-psc1", 570 - .id = -1, 571 - .resource = da830_psc1_resources, 572 - .num_resources = ARRAY_SIZE(da830_psc1_resources), 573 - }; 574 - 575 - void __init da830_register_clocks(void) 576 - { 577 - /* PLL is registered in da830_init_time() */ 578 - platform_device_register(&da830_psc0_device); 579 - platform_device_register(&da830_psc1_device); 580 708 }
+1 -399
arch/arm/mach-davinci/da850.c
··· 10 10 * 2009 (c) MontaVista Software, Inc. 11 11 */ 12 12 13 - #include <linux/clk-provider.h> 14 - #include <linux/clk/davinci.h> 15 - #include <linux/clkdev.h> 16 - #include <linux/cpufreq.h> 17 13 #include <linux/gpio.h> 18 14 #include <linux/init.h> 19 15 #include <linux/io.h> 20 - #include <linux/irqchip/irq-davinci-cp-intc.h> 21 16 #include <linux/mfd/da8xx-cfgchip.h> 22 - #include <linux/platform_data/clk-da8xx-cfgchip.h> 23 - #include <linux/platform_data/clk-davinci-pll.h> 24 - #include <linux/platform_data/davinci-cpufreq.h> 25 - #include <linux/platform_data/gpio-davinci.h> 26 17 #include <linux/platform_device.h> 27 18 #include <linux/regmap.h> 28 19 #include <linux/regulator/consumer.h> ··· 24 33 #include "common.h" 25 34 #include "cputype.h" 26 35 #include "da8xx.h" 36 + #include "hardware.h" 27 37 #include "pm.h" 28 38 #include "irqs.h" 29 39 #include "mux.h" ··· 250 258 #endif 251 259 }; 252 260 253 - const short da850_i2c0_pins[] __initconst = { 254 - DA850_I2C0_SDA, DA850_I2C0_SCL, 255 - -1 256 - }; 257 - 258 - const short da850_i2c1_pins[] __initconst = { 259 - DA850_I2C1_SCL, DA850_I2C1_SDA, 260 - -1 261 - }; 262 - 263 - const short da850_lcdcntl_pins[] __initconst = { 264 - DA850_LCD_D_0, DA850_LCD_D_1, DA850_LCD_D_2, DA850_LCD_D_3, 265 - DA850_LCD_D_4, DA850_LCD_D_5, DA850_LCD_D_6, DA850_LCD_D_7, 266 - DA850_LCD_D_8, DA850_LCD_D_9, DA850_LCD_D_10, DA850_LCD_D_11, 267 - DA850_LCD_D_12, DA850_LCD_D_13, DA850_LCD_D_14, DA850_LCD_D_15, 268 - DA850_LCD_PCLK, DA850_LCD_HSYNC, DA850_LCD_VSYNC, DA850_NLCD_AC_ENB_CS, 269 - -1 270 - }; 271 - 272 - const short da850_vpif_capture_pins[] __initconst = { 273 - DA850_VPIF_DIN0, DA850_VPIF_DIN1, DA850_VPIF_DIN2, DA850_VPIF_DIN3, 274 - DA850_VPIF_DIN4, DA850_VPIF_DIN5, DA850_VPIF_DIN6, DA850_VPIF_DIN7, 275 - DA850_VPIF_DIN8, DA850_VPIF_DIN9, DA850_VPIF_DIN10, DA850_VPIF_DIN11, 276 - DA850_VPIF_DIN12, DA850_VPIF_DIN13, DA850_VPIF_DIN14, DA850_VPIF_DIN15, 277 - DA850_VPIF_CLKIN0, DA850_VPIF_CLKIN1, DA850_VPIF_CLKIN2, 278 - DA850_VPIF_CLKIN3, 279 - -1 280 - }; 281 - 282 - const short da850_vpif_display_pins[] __initconst = { 283 - DA850_VPIF_DOUT0, DA850_VPIF_DOUT1, DA850_VPIF_DOUT2, DA850_VPIF_DOUT3, 284 - DA850_VPIF_DOUT4, DA850_VPIF_DOUT5, DA850_VPIF_DOUT6, DA850_VPIF_DOUT7, 285 - DA850_VPIF_DOUT8, DA850_VPIF_DOUT9, DA850_VPIF_DOUT10, 286 - DA850_VPIF_DOUT11, DA850_VPIF_DOUT12, DA850_VPIF_DOUT13, 287 - DA850_VPIF_DOUT14, DA850_VPIF_DOUT15, DA850_VPIF_CLKO2, 288 - DA850_VPIF_CLKO3, 289 - -1 290 - }; 291 - 292 261 static struct map_desc da850_io_desc[] = { 293 262 { 294 263 .virtual = IO_VIRT, ··· 283 330 }, 284 331 }; 285 332 286 - /* 287 - * Bottom half of timer 0 is used for clock_event, top half for 288 - * clocksource. 289 - */ 290 - static const struct davinci_timer_cfg da850_timer_cfg = { 291 - .reg = DEFINE_RES_IO(DA8XX_TIMER64P0_BASE, SZ_4K), 292 - .irq = { 293 - DEFINE_RES_IRQ(DAVINCI_INTC_IRQ(IRQ_DA8XX_TINT12_0)), 294 - DEFINE_RES_IRQ(DAVINCI_INTC_IRQ(IRQ_DA8XX_TINT34_0)), 295 - }, 296 - }; 297 - 298 - #ifdef CONFIG_CPU_FREQ 299 - /* 300 - * Notes: 301 - * According to the TRM, minimum PLLM results in maximum power savings. 302 - * The OPP definitions below should keep the PLLM as low as possible. 303 - * 304 - * The output of the PLLM must be between 300 to 600 MHz. 305 - */ 306 - struct da850_opp { 307 - unsigned int freq; /* in KHz */ 308 - unsigned int prediv; 309 - unsigned int mult; 310 - unsigned int postdiv; 311 - unsigned int cvdd_min; /* in uV */ 312 - unsigned int cvdd_max; /* in uV */ 313 - }; 314 - 315 - static const struct da850_opp da850_opp_456 = { 316 - .freq = 456000, 317 - .prediv = 1, 318 - .mult = 19, 319 - .postdiv = 1, 320 - .cvdd_min = 1300000, 321 - .cvdd_max = 1350000, 322 - }; 323 - 324 - static const struct da850_opp da850_opp_408 = { 325 - .freq = 408000, 326 - .prediv = 1, 327 - .mult = 17, 328 - .postdiv = 1, 329 - .cvdd_min = 1300000, 330 - .cvdd_max = 1350000, 331 - }; 332 - 333 - static const struct da850_opp da850_opp_372 = { 334 - .freq = 372000, 335 - .prediv = 2, 336 - .mult = 31, 337 - .postdiv = 1, 338 - .cvdd_min = 1200000, 339 - .cvdd_max = 1320000, 340 - }; 341 - 342 - static const struct da850_opp da850_opp_300 = { 343 - .freq = 300000, 344 - .prediv = 1, 345 - .mult = 25, 346 - .postdiv = 2, 347 - .cvdd_min = 1200000, 348 - .cvdd_max = 1320000, 349 - }; 350 - 351 - static const struct da850_opp da850_opp_200 = { 352 - .freq = 200000, 353 - .prediv = 1, 354 - .mult = 25, 355 - .postdiv = 3, 356 - .cvdd_min = 1100000, 357 - .cvdd_max = 1160000, 358 - }; 359 - 360 - static const struct da850_opp da850_opp_96 = { 361 - .freq = 96000, 362 - .prediv = 1, 363 - .mult = 20, 364 - .postdiv = 5, 365 - .cvdd_min = 1000000, 366 - .cvdd_max = 1050000, 367 - }; 368 - 369 - #define OPP(freq) \ 370 - { \ 371 - .driver_data = (unsigned int) &da850_opp_##freq, \ 372 - .frequency = freq * 1000, \ 373 - } 374 - 375 - static struct cpufreq_frequency_table da850_freq_table[] = { 376 - OPP(456), 377 - OPP(408), 378 - OPP(372), 379 - OPP(300), 380 - OPP(200), 381 - OPP(96), 382 - { 383 - .driver_data = 0, 384 - .frequency = CPUFREQ_TABLE_END, 385 - }, 386 - }; 387 - 388 - #ifdef CONFIG_REGULATOR 389 - static int da850_set_voltage(unsigned int index); 390 - static int da850_regulator_init(void); 391 - #endif 392 - 393 - static struct davinci_cpufreq_config cpufreq_info = { 394 - .freq_table = da850_freq_table, 395 - #ifdef CONFIG_REGULATOR 396 - .init = da850_regulator_init, 397 - .set_voltage = da850_set_voltage, 398 - #endif 399 - }; 400 - 401 - #ifdef CONFIG_REGULATOR 402 - static struct regulator *cvdd; 403 - 404 - static int da850_set_voltage(unsigned int index) 405 - { 406 - struct da850_opp *opp; 407 - 408 - if (!cvdd) 409 - return -ENODEV; 410 - 411 - opp = (struct da850_opp *) cpufreq_info.freq_table[index].driver_data; 412 - 413 - return regulator_set_voltage(cvdd, opp->cvdd_min, opp->cvdd_max); 414 - } 415 - 416 - static int da850_regulator_init(void) 417 - { 418 - cvdd = regulator_get(NULL, "cvdd"); 419 - if (WARN(IS_ERR(cvdd), "Unable to obtain voltage regulator for CVDD;" 420 - " voltage scaling unsupported\n")) { 421 - return PTR_ERR(cvdd); 422 - } 423 - 424 - return 0; 425 - } 426 - #endif 427 - 428 - static struct platform_device da850_cpufreq_device = { 429 - .name = "cpufreq-davinci", 430 - .dev = { 431 - .platform_data = &cpufreq_info, 432 - }, 433 - .id = -1, 434 - }; 435 - 436 - unsigned int da850_max_speed = 300000; 437 - 438 - int da850_register_cpufreq(char *async_clk) 439 - { 440 - int i; 441 - 442 - /* cpufreq driver can help keep an "async" clock constant */ 443 - if (async_clk) 444 - clk_add_alias("async", da850_cpufreq_device.name, 445 - async_clk, NULL); 446 - for (i = 0; i < ARRAY_SIZE(da850_freq_table); i++) { 447 - if (da850_freq_table[i].frequency <= da850_max_speed) { 448 - cpufreq_info.freq_table = &da850_freq_table[i]; 449 - break; 450 - } 451 - } 452 - 453 - return platform_device_register(&da850_cpufreq_device); 454 - } 455 - #else 456 - int __init da850_register_cpufreq(char *async_clk) 457 - { 458 - return 0; 459 - } 460 - #endif 461 - 462 333 /* VPIF resource, platform data */ 463 334 static u64 da850_vpif_dma_mask = DMA_BIT_MASK(32); 464 - 465 - static struct resource da850_vpif_resource[] = { 466 - { 467 - .start = DA8XX_VPIF_BASE, 468 - .end = DA8XX_VPIF_BASE + 0xfff, 469 - .flags = IORESOURCE_MEM, 470 - } 471 - }; 472 - 473 - static struct platform_device da850_vpif_dev = { 474 - .name = "vpif", 475 - .id = -1, 476 - .dev = { 477 - .dma_mask = &da850_vpif_dma_mask, 478 - .coherent_dma_mask = DMA_BIT_MASK(32), 479 - }, 480 - .resource = da850_vpif_resource, 481 - .num_resources = ARRAY_SIZE(da850_vpif_resource), 482 - }; 483 335 484 336 static struct resource da850_vpif_display_resource[] = { 485 337 { ··· 329 571 .num_resources = ARRAY_SIZE(da850_vpif_capture_resource), 330 572 }; 331 573 332 - int __init da850_register_vpif(void) 333 - { 334 - return platform_device_register(&da850_vpif_dev); 335 - } 336 - 337 574 int __init da850_register_vpif_display(struct vpif_display_config 338 575 *display_config) 339 576 { ··· 343 590 return platform_device_register(&da850_vpif_capture_dev); 344 591 } 345 592 346 - static struct davinci_gpio_platform_data da850_gpio_platform_data = { 347 - .no_auto_base = true, 348 - .base = 0, 349 - .ngpio = 144, 350 - }; 351 - 352 - int __init da850_register_gpio(void) 353 - { 354 - return da8xx_register_gpio(&da850_gpio_platform_data); 355 - } 356 - 357 593 static const struct davinci_soc_info davinci_soc_info_da850 = { 358 594 .io_desc = da850_io_desc, 359 595 .io_desc_num = ARRAY_SIZE(da850_io_desc), ··· 352 610 .pinmux_base = DA8XX_SYSCFG0_BASE + 0x120, 353 611 .pinmux_pins = da850_pins, 354 612 .pinmux_pins_num = ARRAY_SIZE(da850_pins), 355 - .emac_pdata = &da8xx_emac_pdata, 356 613 .sram_dma = DA8XX_SHARED_RAM_BASE, 357 614 .sram_len = SZ_128K, 358 615 }; ··· 366 625 367 626 da8xx_syscfg1_base = ioremap(DA8XX_SYSCFG1_BASE, SZ_4K); 368 627 WARN(!da8xx_syscfg1_base, "Unable to map syscfg1 module"); 369 - } 370 - 371 - static const struct davinci_cp_intc_config da850_cp_intc_config = { 372 - .reg = { 373 - .start = DA8XX_CP_INTC_BASE, 374 - .end = DA8XX_CP_INTC_BASE + SZ_8K - 1, 375 - .flags = IORESOURCE_MEM, 376 - }, 377 - .num_irqs = DA850_N_CP_INTC_IRQ, 378 - }; 379 - 380 - void __init da850_init_irq(void) 381 - { 382 - davinci_cp_intc_init(&da850_cp_intc_config); 383 - } 384 - 385 - void __init da850_init_time(void) 386 - { 387 - void __iomem *pll0; 388 - struct regmap *cfgchip; 389 - struct clk *clk; 390 - int rv; 391 - 392 - clk_register_fixed_rate(NULL, "ref_clk", NULL, 0, DA850_REF_FREQ); 393 - 394 - pll0 = ioremap(DA8XX_PLL0_BASE, SZ_4K); 395 - cfgchip = da8xx_get_cfgchip(); 396 - 397 - da850_pll0_init(NULL, pll0, cfgchip); 398 - 399 - clk = clk_get(NULL, "timer0"); 400 - if (WARN_ON(IS_ERR(clk))) { 401 - pr_err("Unable to get the timer clock\n"); 402 - return; 403 - } 404 - 405 - rv = davinci_timer_register(clk, &da850_timer_cfg); 406 - WARN(rv, "Unable to register the timer: %d\n", rv); 407 - } 408 - 409 - static struct resource da850_pll1_resources[] = { 410 - { 411 - .start = DA850_PLL1_BASE, 412 - .end = DA850_PLL1_BASE + SZ_4K - 1, 413 - .flags = IORESOURCE_MEM, 414 - }, 415 - }; 416 - 417 - static struct davinci_pll_platform_data da850_pll1_pdata; 418 - 419 - static struct platform_device da850_pll1_device = { 420 - .name = "da850-pll1", 421 - .id = -1, 422 - .resource = da850_pll1_resources, 423 - .num_resources = ARRAY_SIZE(da850_pll1_resources), 424 - .dev = { 425 - .platform_data = &da850_pll1_pdata, 426 - }, 427 - }; 428 - 429 - static struct resource da850_psc0_resources[] = { 430 - { 431 - .start = DA8XX_PSC0_BASE, 432 - .end = DA8XX_PSC0_BASE + SZ_4K - 1, 433 - .flags = IORESOURCE_MEM, 434 - }, 435 - }; 436 - 437 - static struct platform_device da850_psc0_device = { 438 - .name = "da850-psc0", 439 - .id = -1, 440 - .resource = da850_psc0_resources, 441 - .num_resources = ARRAY_SIZE(da850_psc0_resources), 442 - }; 443 - 444 - static struct resource da850_psc1_resources[] = { 445 - { 446 - .start = DA8XX_PSC1_BASE, 447 - .end = DA8XX_PSC1_BASE + SZ_4K - 1, 448 - .flags = IORESOURCE_MEM, 449 - }, 450 - }; 451 - 452 - static struct platform_device da850_psc1_device = { 453 - .name = "da850-psc1", 454 - .id = -1, 455 - .resource = da850_psc1_resources, 456 - .num_resources = ARRAY_SIZE(da850_psc1_resources), 457 - }; 458 - 459 - static struct da8xx_cfgchip_clk_platform_data da850_async1_pdata; 460 - 461 - static struct platform_device da850_async1_clksrc_device = { 462 - .name = "da850-async1-clksrc", 463 - .id = -1, 464 - .dev = { 465 - .platform_data = &da850_async1_pdata, 466 - }, 467 - }; 468 - 469 - static struct da8xx_cfgchip_clk_platform_data da850_async3_pdata; 470 - 471 - static struct platform_device da850_async3_clksrc_device = { 472 - .name = "da850-async3-clksrc", 473 - .id = -1, 474 - .dev = { 475 - .platform_data = &da850_async3_pdata, 476 - }, 477 - }; 478 - 479 - static struct da8xx_cfgchip_clk_platform_data da850_tbclksync_pdata; 480 - 481 - static struct platform_device da850_tbclksync_device = { 482 - .name = "da830-tbclksync", 483 - .id = -1, 484 - .dev = { 485 - .platform_data = &da850_tbclksync_pdata, 486 - }, 487 - }; 488 - 489 - void __init da850_register_clocks(void) 490 - { 491 - /* PLL0 is registered in da850_init_time() */ 492 - 493 - da850_pll1_pdata.cfgchip = da8xx_get_cfgchip(); 494 - platform_device_register(&da850_pll1_device); 495 - 496 - da850_async1_pdata.cfgchip = da8xx_get_cfgchip(); 497 - platform_device_register(&da850_async1_clksrc_device); 498 - 499 - da850_async3_pdata.cfgchip = da8xx_get_cfgchip(); 500 - platform_device_register(&da850_async3_clksrc_device); 501 - 502 - platform_device_register(&da850_psc0_device); 503 - 504 - platform_device_register(&da850_psc1_device); 505 - 506 - da850_tbclksync_pdata.cfgchip = da8xx_get_cfgchip(); 507 - platform_device_register(&da850_tbclksync_device); 508 628 }
+4 -91
arch/arm/mach-davinci/da8xx.h
··· 9 9 #ifndef __ASM_ARCH_DAVINCI_DA8XX_H 10 10 #define __ASM_ARCH_DAVINCI_DA8XX_H 11 11 12 - #include <video/da8xx-fb.h> 13 - 12 + #include <linux/dma-mapping.h> 14 13 #include <linux/platform_device.h> 15 - #include <linux/davinci_emac.h> 16 - #include <linux/spi/spi.h> 17 - #include <linux/platform_data/davinci_asp.h> 14 + #include <linux/videodev2.h> 18 15 #include <linux/reboot.h> 19 16 #include <linux/regmap.h> 20 - #include <linux/videodev2.h> 21 17 22 - #include "serial.h" 18 + #include "hardware.h" 23 19 #include "pm.h" 24 - 25 - #include <linux/platform_data/edma.h> 26 - #include <linux/platform_data/i2c-davinci.h> 27 - #include <linux/platform_data/mmc-davinci.h> 28 - #include <linux/platform_data/usb-davinci.h> 29 - #include <linux/platform_data/spi-davinci.h> 30 - #include <linux/platform_data/uio_pruss.h> 31 20 32 21 #include <media/davinci/vpif_types.h> 33 22 34 23 extern void __iomem *da8xx_syscfg0_base; 35 24 extern void __iomem *da8xx_syscfg1_base; 36 - 37 - /* 38 - * If the DA850/OMAP-L138/AM18x SoC on board is of a higher speed grade 39 - * (than the regular 300MHz variant), the board code should set this up 40 - * with the supported speed before calling da850_register_cpufreq(). 41 - */ 42 - extern unsigned int da850_max_speed; 43 25 44 26 /* 45 27 * The cp_intc interrupt controller for the da8xx isn't in the same ··· 69 87 #define DA8XX_ARM_RAM_BASE 0xffff0000 70 88 71 89 void da830_init(void); 72 - void da830_init_irq(void); 73 - void da830_init_time(void); 74 - void da830_register_clocks(void); 75 90 76 91 void da850_init(void); 77 - void da850_init_irq(void); 78 - void da850_init_time(void); 79 - void da850_register_clocks(void); 80 92 81 - int da830_register_edma(struct edma_rsv_info *rsv); 82 - int da850_register_edma(struct edma_rsv_info *rsv[2]); 83 - int da8xx_register_i2c(int instance, struct davinci_i2c_platform_data *pdata); 84 - int da8xx_register_spi_bus(int instance, unsigned num_chipselect); 85 - int da8xx_register_watchdog(void); 86 - int da8xx_register_usb_phy(void); 87 - int da8xx_register_usb20(unsigned mA, unsigned potpgt); 88 - int da8xx_register_usb11(struct da8xx_ohci_root_hub *pdata); 89 - int da8xx_register_usb_phy_clocks(void); 90 - int da850_register_sata_refclk(int rate); 91 - int da8xx_register_emac(void); 92 - int da8xx_register_uio_pruss(void); 93 - int da8xx_register_lcdc(struct da8xx_lcdc_platform_data *pdata); 94 - int da8xx_register_mmcsd0(struct davinci_mmc_config *config); 95 - int da850_register_mmcsd1(struct davinci_mmc_config *config); 96 - void da8xx_register_mcasp(int id, struct snd_platform_data *pdata); 97 - int da8xx_register_rtc(void); 98 - int da8xx_register_gpio(void *pdata); 99 - int da850_register_cpufreq(char *async_clk); 100 - int da8xx_register_cpuidle(void); 101 - void __iomem *da8xx_get_mem_ctlr(void); 102 - int da850_register_sata(unsigned long refclkpn); 103 - int da850_register_vpif(void); 104 93 int da850_register_vpif_display 105 94 (struct vpif_display_config *display_config); 106 95 int da850_register_vpif_capture 107 96 (struct vpif_capture_config *capture_config); 108 - void da8xx_rproc_reserve_cma(void); 109 - int da8xx_register_rproc(void); 110 - int da850_register_gpio(void); 111 - int da830_register_gpio(void); 112 97 struct regmap *da8xx_get_cfgchip(void); 113 - 114 - extern struct platform_device da8xx_serial_device[]; 115 - extern struct emac_platform_data da8xx_emac_pdata; 116 - extern struct da8xx_lcdc_platform_data sharp_lcd035q3dg01_pdata; 117 - extern struct da8xx_lcdc_platform_data sharp_lk043t1dg01_pdata; 118 - 119 - 120 - extern const short da830_emif25_pins[]; 121 - extern const short da830_spi0_pins[]; 122 - extern const short da830_spi1_pins[]; 123 - extern const short da830_mmc_sd_pins[]; 124 - extern const short da830_uart0_pins[]; 125 - extern const short da830_uart1_pins[]; 126 - extern const short da830_uart2_pins[]; 127 - extern const short da830_usb20_pins[]; 128 - extern const short da830_usb11_pins[]; 129 - extern const short da830_uhpi_pins[]; 130 - extern const short da830_cpgmac_pins[]; 131 - extern const short da830_emif3c_pins[]; 132 - extern const short da830_mcasp0_pins[]; 133 - extern const short da830_mcasp1_pins[]; 134 - extern const short da830_mcasp2_pins[]; 135 - extern const short da830_i2c0_pins[]; 136 - extern const short da830_i2c1_pins[]; 137 - extern const short da830_lcdcntl_pins[]; 138 - extern const short da830_pwm_pins[]; 139 - extern const short da830_ecap0_pins[]; 140 - extern const short da830_ecap1_pins[]; 141 - extern const short da830_ecap2_pins[]; 142 - extern const short da830_eqep0_pins[]; 143 - extern const short da830_eqep1_pins[]; 144 - extern const short da850_vpif_capture_pins[]; 145 - extern const short da850_vpif_display_pins[]; 146 - 147 - extern const short da850_i2c0_pins[]; 148 - extern const short da850_i2c1_pins[]; 149 - extern const short da850_lcdcntl_pins[]; 98 + void __iomem *da8xx_get_mem_ctlr(void); 150 99 151 100 #endif /* __ASM_ARCH_DAVINCI_DA8XX_H */
-136
arch/arm/mach-davinci/davinci.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0-only */ 2 - /* 3 - * This file contains the processor specific definitions 4 - * of the TI DM644x, DM355, DM365, and DM646x. 5 - * 6 - * Copyright (C) 2011 Texas Instruments Incorporated 7 - * Copyright (c) 2007 Deep Root Systems, LLC 8 - */ 9 - #ifndef __DAVINCI_H 10 - #define __DAVINCI_H 11 - 12 - #include <linux/clk.h> 13 - #include <linux/videodev2.h> 14 - #include <linux/davinci_emac.h> 15 - #include <linux/platform_device.h> 16 - #include <linux/spi/spi.h> 17 - #include <linux/platform_data/davinci_asp.h> 18 - #include <linux/platform_data/edma.h> 19 - #include <linux/platform_data/keyscan-davinci.h> 20 - 21 - #include "hardware.h" 22 - 23 - #include <media/davinci/vpfe_capture.h> 24 - #include <media/davinci/vpif_types.h> 25 - #include <media/davinci/vpss.h> 26 - #include <media/davinci/vpbe_types.h> 27 - #include <media/davinci/vpbe_venc.h> 28 - #include <media/davinci/vpbe.h> 29 - #include <media/davinci/vpbe_osd.h> 30 - 31 - #define DAVINCI_PLL1_BASE 0x01c40800 32 - #define DAVINCI_PLL2_BASE 0x01c40c00 33 - #define DAVINCI_PWR_SLEEP_CNTRL_BASE 0x01c41000 34 - 35 - #define DAVINCI_SYSTEM_MODULE_BASE 0x01c40000 36 - #define SYSMOD_VDAC_CONFIG 0x2c 37 - #define SYSMOD_VIDCLKCTL 0x38 38 - #define SYSMOD_VPSS_CLKCTL 0x44 39 - #define SYSMOD_VDD3P3VPWDN 0x48 40 - #define SYSMOD_VSCLKDIS 0x6c 41 - #define SYSMOD_PUPDCTL1 0x7c 42 - 43 - /* VPSS CLKCTL bit definitions */ 44 - #define VPSS_MUXSEL_EXTCLK_ENABLE BIT(1) 45 - #define VPSS_VENCCLKEN_ENABLE BIT(3) 46 - #define VPSS_DACCLKEN_ENABLE BIT(4) 47 - #define VPSS_PLLC2SYSCLK5_ENABLE BIT(5) 48 - 49 - extern void __iomem *davinci_sysmod_base; 50 - #define DAVINCI_SYSMOD_VIRT(x) (davinci_sysmod_base + (x)) 51 - void davinci_map_sysmod(void); 52 - 53 - #define DAVINCI_GPIO_BASE 0x01C67000 54 - int davinci_gpio_register(struct resource *res, int size, void *pdata); 55 - 56 - #define DAVINCI_TIMER0_BASE (IO_PHYS + 0x21400) 57 - #define DAVINCI_WDOG_BASE (IO_PHYS + 0x21C00) 58 - 59 - /* DM355 base addresses */ 60 - #define DM355_ASYNC_EMIF_CONTROL_BASE 0x01e10000 61 - #define DM355_ASYNC_EMIF_DATA_CE0_BASE 0x02000000 62 - 63 - #define ASP1_TX_EVT_EN 1 64 - #define ASP1_RX_EVT_EN 2 65 - 66 - /* DM365 base addresses */ 67 - #define DM365_ASYNC_EMIF_CONTROL_BASE 0x01d10000 68 - #define DM365_ASYNC_EMIF_DATA_CE0_BASE 0x02000000 69 - #define DM365_ASYNC_EMIF_DATA_CE1_BASE 0x04000000 70 - 71 - /* DM644x base addresses */ 72 - #define DM644X_ASYNC_EMIF_CONTROL_BASE 0x01e00000 73 - #define DM644X_ASYNC_EMIF_DATA_CE0_BASE 0x02000000 74 - #define DM644X_ASYNC_EMIF_DATA_CE1_BASE 0x04000000 75 - #define DM644X_ASYNC_EMIF_DATA_CE2_BASE 0x06000000 76 - #define DM644X_ASYNC_EMIF_DATA_CE3_BASE 0x08000000 77 - 78 - /* DM646x base addresses */ 79 - #define DM646X_ASYNC_EMIF_CONTROL_BASE 0x20008000 80 - #define DM646X_ASYNC_EMIF_CS2_SPACE_BASE 0x42000000 81 - 82 - int davinci_init_wdt(void); 83 - 84 - /* DM355 function declarations */ 85 - void dm355_init(void); 86 - void dm355_init_time(void); 87 - void dm355_init_irq(void); 88 - void dm355_register_clocks(void); 89 - void dm355_init_spi0(unsigned chipselect_mask, 90 - const struct spi_board_info *info, unsigned len); 91 - void dm355_init_asp1(u32 evt_enable); 92 - int dm355_init_video(struct vpfe_config *, struct vpbe_config *); 93 - int dm355_gpio_register(void); 94 - 95 - /* DM365 function declarations */ 96 - void dm365_init(void); 97 - void dm365_init_irq(void); 98 - void dm365_init_time(void); 99 - void dm365_register_clocks(void); 100 - void dm365_init_asp(void); 101 - void dm365_init_vc(void); 102 - void dm365_init_ks(struct davinci_ks_platform_data *pdata); 103 - void dm365_init_rtc(void); 104 - void dm365_init_spi0(unsigned chipselect_mask, 105 - const struct spi_board_info *info, unsigned len); 106 - int dm365_init_video(struct vpfe_config *, struct vpbe_config *); 107 - int dm365_gpio_register(void); 108 - 109 - /* DM644x function declarations */ 110 - void dm644x_init(void); 111 - void dm644x_init_irq(void); 112 - void dm644x_init_devices(void); 113 - void dm644x_init_time(void); 114 - void dm644x_register_clocks(void); 115 - void dm644x_init_asp(void); 116 - int dm644x_init_video(struct vpfe_config *, struct vpbe_config *); 117 - int dm644x_gpio_register(void); 118 - 119 - /* DM646x function declarations */ 120 - void dm646x_init(void); 121 - void dm646x_init_irq(void); 122 - void dm646x_init_time(unsigned long ref_clk_rate, unsigned long aux_clkin_rate); 123 - void dm646x_register_clocks(void); 124 - void dm646x_init_mcasp0(struct snd_platform_data *pdata); 125 - void dm646x_init_mcasp1(struct snd_platform_data *pdata); 126 - int dm646x_init_edma(struct edma_rsv_info *rsv); 127 - void dm646x_video_init(void); 128 - void dm646x_setup_vpif(struct vpif_display_config *, 129 - struct vpif_capture_config *); 130 - int dm646x_gpio_register(void); 131 - 132 - extern struct platform_device dm365_serial_device[]; 133 - extern struct platform_device dm355_serial_device[]; 134 - extern struct platform_device dm644x_serial_device[]; 135 - extern struct platform_device dm646x_serial_device[]; 136 - #endif /*__DAVINCI_H */
-1095
arch/arm/mach-davinci/devices-da8xx.c
··· 21 21 #include "common.h" 22 22 #include "cputype.h" 23 23 #include "da8xx.h" 24 - #include "asp.h" 25 24 #include "cpuidle.h" 26 25 #include "irqs.h" 27 26 #include "sram.h" ··· 56 57 void __iomem *da8xx_syscfg0_base; 57 58 void __iomem *da8xx_syscfg1_base; 58 59 59 - static struct plat_serial8250_port da8xx_serial0_pdata[] = { 60 - { 61 - .mapbase = DA8XX_UART0_BASE, 62 - .irq = DAVINCI_INTC_IRQ(IRQ_DA8XX_UARTINT0), 63 - .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | 64 - UPF_IOREMAP, 65 - .iotype = UPIO_MEM, 66 - .regshift = 2, 67 - }, 68 - { 69 - .flags = 0, 70 - } 71 - }; 72 - static struct plat_serial8250_port da8xx_serial1_pdata[] = { 73 - { 74 - .mapbase = DA8XX_UART1_BASE, 75 - .irq = DAVINCI_INTC_IRQ(IRQ_DA8XX_UARTINT1), 76 - .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | 77 - UPF_IOREMAP, 78 - .iotype = UPIO_MEM, 79 - .regshift = 2, 80 - }, 81 - { 82 - .flags = 0, 83 - } 84 - }; 85 - static struct plat_serial8250_port da8xx_serial2_pdata[] = { 86 - { 87 - .mapbase = DA8XX_UART2_BASE, 88 - .irq = DAVINCI_INTC_IRQ(IRQ_DA8XX_UARTINT2), 89 - .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | 90 - UPF_IOREMAP, 91 - .iotype = UPIO_MEM, 92 - .regshift = 2, 93 - }, 94 - { 95 - .flags = 0, 96 - } 97 - }; 98 - 99 - struct platform_device da8xx_serial_device[] = { 100 - { 101 - .name = "serial8250", 102 - .id = PLAT8250_DEV_PLATFORM, 103 - .dev = { 104 - .platform_data = da8xx_serial0_pdata, 105 - } 106 - }, 107 - { 108 - .name = "serial8250", 109 - .id = PLAT8250_DEV_PLATFORM1, 110 - .dev = { 111 - .platform_data = da8xx_serial1_pdata, 112 - } 113 - }, 114 - { 115 - .name = "serial8250", 116 - .id = PLAT8250_DEV_PLATFORM2, 117 - .dev = { 118 - .platform_data = da8xx_serial2_pdata, 119 - } 120 - }, 121 - { 122 - } 123 - }; 124 - 125 - static s8 da8xx_queue_priority_mapping[][2] = { 126 - /* {event queue no, Priority} */ 127 - {0, 3}, 128 - {1, 7}, 129 - {-1, -1} 130 - }; 131 - 132 - static s8 da850_queue_priority_mapping[][2] = { 133 - /* {event queue no, Priority} */ 134 - {0, 3}, 135 - {-1, -1} 136 - }; 137 - 138 - static struct edma_soc_info da8xx_edma0_pdata = { 139 - .queue_priority_mapping = da8xx_queue_priority_mapping, 140 - .default_queue = EVENTQ_1, 141 - }; 142 - 143 - static struct edma_soc_info da850_edma1_pdata = { 144 - .queue_priority_mapping = da850_queue_priority_mapping, 145 - .default_queue = EVENTQ_0, 146 - }; 147 - 148 - static struct resource da8xx_edma0_resources[] = { 149 - { 150 - .name = "edma3_cc", 151 - .start = DA8XX_TPCC_BASE, 152 - .end = DA8XX_TPCC_BASE + SZ_32K - 1, 153 - .flags = IORESOURCE_MEM, 154 - }, 155 - { 156 - .name = "edma3_tc0", 157 - .start = DA8XX_TPTC0_BASE, 158 - .end = DA8XX_TPTC0_BASE + SZ_1K - 1, 159 - .flags = IORESOURCE_MEM, 160 - }, 161 - { 162 - .name = "edma3_tc1", 163 - .start = DA8XX_TPTC1_BASE, 164 - .end = DA8XX_TPTC1_BASE + SZ_1K - 1, 165 - .flags = IORESOURCE_MEM, 166 - }, 167 - { 168 - .name = "edma3_ccint", 169 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_CCINT0), 170 - .flags = IORESOURCE_IRQ, 171 - }, 172 - { 173 - .name = "edma3_ccerrint", 174 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_CCERRINT), 175 - .flags = IORESOURCE_IRQ, 176 - }, 177 - }; 178 - 179 - static struct resource da850_edma1_resources[] = { 180 - { 181 - .name = "edma3_cc", 182 - .start = DA850_TPCC1_BASE, 183 - .end = DA850_TPCC1_BASE + SZ_32K - 1, 184 - .flags = IORESOURCE_MEM, 185 - }, 186 - { 187 - .name = "edma3_tc0", 188 - .start = DA850_TPTC2_BASE, 189 - .end = DA850_TPTC2_BASE + SZ_1K - 1, 190 - .flags = IORESOURCE_MEM, 191 - }, 192 - { 193 - .name = "edma3_ccint", 194 - .start = DAVINCI_INTC_IRQ(IRQ_DA850_CCINT1), 195 - .flags = IORESOURCE_IRQ, 196 - }, 197 - { 198 - .name = "edma3_ccerrint", 199 - .start = DAVINCI_INTC_IRQ(IRQ_DA850_CCERRINT1), 200 - .flags = IORESOURCE_IRQ, 201 - }, 202 - }; 203 - 204 - static const struct platform_device_info da8xx_edma0_device __initconst = { 205 - .name = "edma", 206 - .id = 0, 207 - .dma_mask = DMA_BIT_MASK(32), 208 - .res = da8xx_edma0_resources, 209 - .num_res = ARRAY_SIZE(da8xx_edma0_resources), 210 - .data = &da8xx_edma0_pdata, 211 - .size_data = sizeof(da8xx_edma0_pdata), 212 - }; 213 - 214 - static const struct platform_device_info da850_edma1_device __initconst = { 215 - .name = "edma", 216 - .id = 1, 217 - .dma_mask = DMA_BIT_MASK(32), 218 - .res = da850_edma1_resources, 219 - .num_res = ARRAY_SIZE(da850_edma1_resources), 220 - .data = &da850_edma1_pdata, 221 - .size_data = sizeof(da850_edma1_pdata), 222 - }; 223 - 224 - static const struct dma_slave_map da830_edma_map[] = { 225 - { "davinci-mcasp.0", "rx", EDMA_FILTER_PARAM(0, 0) }, 226 - { "davinci-mcasp.0", "tx", EDMA_FILTER_PARAM(0, 1) }, 227 - { "davinci-mcasp.1", "rx", EDMA_FILTER_PARAM(0, 2) }, 228 - { "davinci-mcasp.1", "tx", EDMA_FILTER_PARAM(0, 3) }, 229 - { "davinci-mcasp.2", "rx", EDMA_FILTER_PARAM(0, 4) }, 230 - { "davinci-mcasp.2", "tx", EDMA_FILTER_PARAM(0, 5) }, 231 - { "spi_davinci.0", "rx", EDMA_FILTER_PARAM(0, 14) }, 232 - { "spi_davinci.0", "tx", EDMA_FILTER_PARAM(0, 15) }, 233 - { "da830-mmc.0", "rx", EDMA_FILTER_PARAM(0, 16) }, 234 - { "da830-mmc.0", "tx", EDMA_FILTER_PARAM(0, 17) }, 235 - { "spi_davinci.1", "rx", EDMA_FILTER_PARAM(0, 18) }, 236 - { "spi_davinci.1", "tx", EDMA_FILTER_PARAM(0, 19) }, 237 - }; 238 - 239 - int __init da830_register_edma(struct edma_rsv_info *rsv) 240 - { 241 - struct platform_device *edma_pdev; 242 - 243 - da8xx_edma0_pdata.rsv = rsv; 244 - 245 - da8xx_edma0_pdata.slave_map = da830_edma_map; 246 - da8xx_edma0_pdata.slavecnt = ARRAY_SIZE(da830_edma_map); 247 - 248 - edma_pdev = platform_device_register_full(&da8xx_edma0_device); 249 - return PTR_ERR_OR_ZERO(edma_pdev); 250 - } 251 - 252 - static const struct dma_slave_map da850_edma0_map[] = { 253 - { "davinci-mcasp.0", "rx", EDMA_FILTER_PARAM(0, 0) }, 254 - { "davinci-mcasp.0", "tx", EDMA_FILTER_PARAM(0, 1) }, 255 - { "davinci-mcbsp.0", "rx", EDMA_FILTER_PARAM(0, 2) }, 256 - { "davinci-mcbsp.0", "tx", EDMA_FILTER_PARAM(0, 3) }, 257 - { "davinci-mcbsp.1", "rx", EDMA_FILTER_PARAM(0, 4) }, 258 - { "davinci-mcbsp.1", "tx", EDMA_FILTER_PARAM(0, 5) }, 259 - { "spi_davinci.0", "rx", EDMA_FILTER_PARAM(0, 14) }, 260 - { "spi_davinci.0", "tx", EDMA_FILTER_PARAM(0, 15) }, 261 - { "da830-mmc.0", "rx", EDMA_FILTER_PARAM(0, 16) }, 262 - { "da830-mmc.0", "tx", EDMA_FILTER_PARAM(0, 17) }, 263 - { "spi_davinci.1", "rx", EDMA_FILTER_PARAM(0, 18) }, 264 - { "spi_davinci.1", "tx", EDMA_FILTER_PARAM(0, 19) }, 265 - }; 266 - 267 - static const struct dma_slave_map da850_edma1_map[] = { 268 - { "da830-mmc.1", "rx", EDMA_FILTER_PARAM(1, 28) }, 269 - { "da830-mmc.1", "tx", EDMA_FILTER_PARAM(1, 29) }, 270 - }; 271 - 272 - int __init da850_register_edma(struct edma_rsv_info *rsv[2]) 273 - { 274 - struct platform_device *edma_pdev; 275 - 276 - if (rsv) { 277 - da8xx_edma0_pdata.rsv = rsv[0]; 278 - da850_edma1_pdata.rsv = rsv[1]; 279 - } 280 - 281 - da8xx_edma0_pdata.slave_map = da850_edma0_map; 282 - da8xx_edma0_pdata.slavecnt = ARRAY_SIZE(da850_edma0_map); 283 - 284 - edma_pdev = platform_device_register_full(&da8xx_edma0_device); 285 - if (IS_ERR(edma_pdev)) { 286 - pr_warn("%s: Failed to register eDMA0\n", __func__); 287 - return PTR_ERR(edma_pdev); 288 - } 289 - 290 - da850_edma1_pdata.slave_map = da850_edma1_map; 291 - da850_edma1_pdata.slavecnt = ARRAY_SIZE(da850_edma1_map); 292 - 293 - edma_pdev = platform_device_register_full(&da850_edma1_device); 294 - return PTR_ERR_OR_ZERO(edma_pdev); 295 - } 296 - 297 - static struct resource da8xx_i2c_resources0[] = { 298 - { 299 - .start = DA8XX_I2C0_BASE, 300 - .end = DA8XX_I2C0_BASE + SZ_4K - 1, 301 - .flags = IORESOURCE_MEM, 302 - }, 303 - { 304 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_I2CINT0), 305 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_I2CINT0), 306 - .flags = IORESOURCE_IRQ, 307 - }, 308 - }; 309 - 310 - static struct platform_device da8xx_i2c_device0 = { 311 - .name = "i2c_davinci", 312 - .id = 1, 313 - .num_resources = ARRAY_SIZE(da8xx_i2c_resources0), 314 - .resource = da8xx_i2c_resources0, 315 - }; 316 - 317 - static struct resource da8xx_i2c_resources1[] = { 318 - { 319 - .start = DA8XX_I2C1_BASE, 320 - .end = DA8XX_I2C1_BASE + SZ_4K - 1, 321 - .flags = IORESOURCE_MEM, 322 - }, 323 - { 324 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_I2CINT1), 325 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_I2CINT1), 326 - .flags = IORESOURCE_IRQ, 327 - }, 328 - }; 329 - 330 - static struct platform_device da8xx_i2c_device1 = { 331 - .name = "i2c_davinci", 332 - .id = 2, 333 - .num_resources = ARRAY_SIZE(da8xx_i2c_resources1), 334 - .resource = da8xx_i2c_resources1, 335 - }; 336 - 337 - int __init da8xx_register_i2c(int instance, 338 - struct davinci_i2c_platform_data *pdata) 339 - { 340 - struct platform_device *pdev; 341 - 342 - if (instance == 0) 343 - pdev = &da8xx_i2c_device0; 344 - else if (instance == 1) 345 - pdev = &da8xx_i2c_device1; 346 - else 347 - return -EINVAL; 348 - 349 - pdev->dev.platform_data = pdata; 350 - return platform_device_register(pdev); 351 - } 352 - 353 - static struct resource da8xx_watchdog_resources[] = { 354 - { 355 - .start = DA8XX_WDOG_BASE, 356 - .end = DA8XX_WDOG_BASE + SZ_4K - 1, 357 - .flags = IORESOURCE_MEM, 358 - }, 359 - }; 360 - 361 - static struct platform_device da8xx_wdt_device = { 362 - .name = "davinci-wdt", 363 - .id = -1, 364 - .num_resources = ARRAY_SIZE(da8xx_watchdog_resources), 365 - .resource = da8xx_watchdog_resources, 366 - }; 367 - 368 - int __init da8xx_register_watchdog(void) 369 - { 370 - return platform_device_register(&da8xx_wdt_device); 371 - } 372 - 373 - static struct resource da8xx_emac_resources[] = { 374 - { 375 - .start = DA8XX_EMAC_CPPI_PORT_BASE, 376 - .end = DA8XX_EMAC_CPPI_PORT_BASE + SZ_16K - 1, 377 - .flags = IORESOURCE_MEM, 378 - }, 379 - { 380 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_C0_RX_THRESH_PULSE), 381 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_C0_RX_THRESH_PULSE), 382 - .flags = IORESOURCE_IRQ, 383 - }, 384 - { 385 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_C0_RX_PULSE), 386 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_C0_RX_PULSE), 387 - .flags = IORESOURCE_IRQ, 388 - }, 389 - { 390 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_C0_TX_PULSE), 391 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_C0_TX_PULSE), 392 - .flags = IORESOURCE_IRQ, 393 - }, 394 - { 395 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_C0_MISC_PULSE), 396 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_C0_MISC_PULSE), 397 - .flags = IORESOURCE_IRQ, 398 - }, 399 - }; 400 - 401 - struct emac_platform_data da8xx_emac_pdata = { 402 - .ctrl_reg_offset = DA8XX_EMAC_CTRL_REG_OFFSET, 403 - .ctrl_mod_reg_offset = DA8XX_EMAC_MOD_REG_OFFSET, 404 - .ctrl_ram_offset = DA8XX_EMAC_RAM_OFFSET, 405 - .ctrl_ram_size = DA8XX_EMAC_CTRL_RAM_SIZE, 406 - .version = EMAC_VERSION_2, 407 - }; 408 - 409 - static struct platform_device da8xx_emac_device = { 410 - .name = "davinci_emac", 411 - .id = 1, 412 - .dev = { 413 - .platform_data = &da8xx_emac_pdata, 414 - }, 415 - .num_resources = ARRAY_SIZE(da8xx_emac_resources), 416 - .resource = da8xx_emac_resources, 417 - }; 418 - 419 - static struct resource da8xx_mdio_resources[] = { 420 - { 421 - .start = DA8XX_EMAC_MDIO_BASE, 422 - .end = DA8XX_EMAC_MDIO_BASE + SZ_4K - 1, 423 - .flags = IORESOURCE_MEM, 424 - }, 425 - }; 426 - 427 - static struct platform_device da8xx_mdio_device = { 428 - .name = "davinci_mdio", 429 - .id = 0, 430 - .num_resources = ARRAY_SIZE(da8xx_mdio_resources), 431 - .resource = da8xx_mdio_resources, 432 - }; 433 - 434 - int __init da8xx_register_emac(void) 435 - { 436 - int ret; 437 - 438 - ret = platform_device_register(&da8xx_mdio_device); 439 - if (ret < 0) 440 - return ret; 441 - 442 - return platform_device_register(&da8xx_emac_device); 443 - } 444 - 445 - static struct resource da830_mcasp1_resources[] = { 446 - { 447 - .name = "mpu", 448 - .start = DAVINCI_DA830_MCASP1_REG_BASE, 449 - .end = DAVINCI_DA830_MCASP1_REG_BASE + (SZ_1K * 12) - 1, 450 - .flags = IORESOURCE_MEM, 451 - }, 452 - /* TX event */ 453 - { 454 - .name = "tx", 455 - .start = DAVINCI_DA830_DMA_MCASP1_AXEVT, 456 - .end = DAVINCI_DA830_DMA_MCASP1_AXEVT, 457 - .flags = IORESOURCE_DMA, 458 - }, 459 - /* RX event */ 460 - { 461 - .name = "rx", 462 - .start = DAVINCI_DA830_DMA_MCASP1_AREVT, 463 - .end = DAVINCI_DA830_DMA_MCASP1_AREVT, 464 - .flags = IORESOURCE_DMA, 465 - }, 466 - { 467 - .name = "common", 468 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_MCASPINT), 469 - .flags = IORESOURCE_IRQ, 470 - }, 471 - }; 472 - 473 - static struct platform_device da830_mcasp1_device = { 474 - .name = "davinci-mcasp", 475 - .id = 1, 476 - .num_resources = ARRAY_SIZE(da830_mcasp1_resources), 477 - .resource = da830_mcasp1_resources, 478 - }; 479 - 480 - static struct resource da830_mcasp2_resources[] = { 481 - { 482 - .name = "mpu", 483 - .start = DAVINCI_DA830_MCASP2_REG_BASE, 484 - .end = DAVINCI_DA830_MCASP2_REG_BASE + (SZ_1K * 12) - 1, 485 - .flags = IORESOURCE_MEM, 486 - }, 487 - /* TX event */ 488 - { 489 - .name = "tx", 490 - .start = DAVINCI_DA830_DMA_MCASP2_AXEVT, 491 - .end = DAVINCI_DA830_DMA_MCASP2_AXEVT, 492 - .flags = IORESOURCE_DMA, 493 - }, 494 - /* RX event */ 495 - { 496 - .name = "rx", 497 - .start = DAVINCI_DA830_DMA_MCASP2_AREVT, 498 - .end = DAVINCI_DA830_DMA_MCASP2_AREVT, 499 - .flags = IORESOURCE_DMA, 500 - }, 501 - { 502 - .name = "common", 503 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_MCASPINT), 504 - .flags = IORESOURCE_IRQ, 505 - }, 506 - }; 507 - 508 - static struct platform_device da830_mcasp2_device = { 509 - .name = "davinci-mcasp", 510 - .id = 2, 511 - .num_resources = ARRAY_SIZE(da830_mcasp2_resources), 512 - .resource = da830_mcasp2_resources, 513 - }; 514 - 515 - static struct resource da850_mcasp_resources[] = { 516 - { 517 - .name = "mpu", 518 - .start = DAVINCI_DA8XX_MCASP0_REG_BASE, 519 - .end = DAVINCI_DA8XX_MCASP0_REG_BASE + (SZ_1K * 12) - 1, 520 - .flags = IORESOURCE_MEM, 521 - }, 522 - /* TX event */ 523 - { 524 - .name = "tx", 525 - .start = DAVINCI_DA8XX_DMA_MCASP0_AXEVT, 526 - .end = DAVINCI_DA8XX_DMA_MCASP0_AXEVT, 527 - .flags = IORESOURCE_DMA, 528 - }, 529 - /* RX event */ 530 - { 531 - .name = "rx", 532 - .start = DAVINCI_DA8XX_DMA_MCASP0_AREVT, 533 - .end = DAVINCI_DA8XX_DMA_MCASP0_AREVT, 534 - .flags = IORESOURCE_DMA, 535 - }, 536 - { 537 - .name = "common", 538 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_MCASPINT), 539 - .flags = IORESOURCE_IRQ, 540 - }, 541 - }; 542 - 543 - static struct platform_device da850_mcasp_device = { 544 - .name = "davinci-mcasp", 545 - .id = 0, 546 - .num_resources = ARRAY_SIZE(da850_mcasp_resources), 547 - .resource = da850_mcasp_resources, 548 - }; 549 - 550 - void __init da8xx_register_mcasp(int id, struct snd_platform_data *pdata) 551 - { 552 - struct platform_device *pdev; 553 - 554 - switch (id) { 555 - case 0: 556 - /* Valid for DA830/OMAP-L137 or DA850/OMAP-L138 */ 557 - pdev = &da850_mcasp_device; 558 - break; 559 - case 1: 560 - /* Valid for DA830/OMAP-L137 only */ 561 - if (!cpu_is_davinci_da830()) 562 - return; 563 - pdev = &da830_mcasp1_device; 564 - break; 565 - case 2: 566 - /* Valid for DA830/OMAP-L137 only */ 567 - if (!cpu_is_davinci_da830()) 568 - return; 569 - pdev = &da830_mcasp2_device; 570 - break; 571 - default: 572 - return; 573 - } 574 - 575 - pdev->dev.platform_data = pdata; 576 - platform_device_register(pdev); 577 - } 578 - 579 - static struct resource da8xx_pruss_resources[] = { 580 - { 581 - .start = DA8XX_PRUSS_MEM_BASE, 582 - .end = DA8XX_PRUSS_MEM_BASE + 0xFFFF, 583 - .flags = IORESOURCE_MEM, 584 - }, 585 - { 586 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT0), 587 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT0), 588 - .flags = IORESOURCE_IRQ, 589 - }, 590 - { 591 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT1), 592 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT1), 593 - .flags = IORESOURCE_IRQ, 594 - }, 595 - { 596 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT2), 597 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT2), 598 - .flags = IORESOURCE_IRQ, 599 - }, 600 - { 601 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT3), 602 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT3), 603 - .flags = IORESOURCE_IRQ, 604 - }, 605 - { 606 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT4), 607 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT4), 608 - .flags = IORESOURCE_IRQ, 609 - }, 610 - { 611 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT5), 612 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT5), 613 - .flags = IORESOURCE_IRQ, 614 - }, 615 - { 616 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT6), 617 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT6), 618 - .flags = IORESOURCE_IRQ, 619 - }, 620 - { 621 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT7), 622 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_EVTOUT7), 623 - .flags = IORESOURCE_IRQ, 624 - }, 625 - }; 626 - 627 - static struct uio_pruss_pdata da8xx_uio_pruss_pdata = { 628 - .pintc_base = 0x4000, 629 - }; 630 - 631 - static struct platform_device da8xx_uio_pruss_dev = { 632 - .name = "pruss_uio", 633 - .id = -1, 634 - .num_resources = ARRAY_SIZE(da8xx_pruss_resources), 635 - .resource = da8xx_pruss_resources, 636 - .dev = { 637 - .coherent_dma_mask = DMA_BIT_MASK(32), 638 - .platform_data = &da8xx_uio_pruss_pdata, 639 - } 640 - }; 641 - 642 - int __init da8xx_register_uio_pruss(void) 643 - { 644 - da8xx_uio_pruss_pdata.sram_pool = sram_get_gen_pool(); 645 - return platform_device_register(&da8xx_uio_pruss_dev); 646 - } 647 - 648 - static struct lcd_ctrl_config lcd_cfg = { 649 - .panel_shade = COLOR_ACTIVE, 650 - .bpp = 16, 651 - }; 652 - 653 - struct da8xx_lcdc_platform_data sharp_lcd035q3dg01_pdata = { 654 - .manu_name = "sharp", 655 - .controller_data = &lcd_cfg, 656 - .type = "Sharp_LCD035Q3DG01", 657 - }; 658 - 659 - struct da8xx_lcdc_platform_data sharp_lk043t1dg01_pdata = { 660 - .manu_name = "sharp", 661 - .controller_data = &lcd_cfg, 662 - .type = "Sharp_LK043T1DG01", 663 - }; 664 - 665 - static struct resource da8xx_lcdc_resources[] = { 666 - [0] = { /* registers */ 667 - .start = DA8XX_LCD_CNTRL_BASE, 668 - .end = DA8XX_LCD_CNTRL_BASE + SZ_4K - 1, 669 - .flags = IORESOURCE_MEM, 670 - }, 671 - [1] = { /* interrupt */ 672 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_LCDINT), 673 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_LCDINT), 674 - .flags = IORESOURCE_IRQ, 675 - }, 676 - }; 677 - 678 - static struct platform_device da8xx_lcdc_device = { 679 - .name = "da8xx_lcdc", 680 - .id = 0, 681 - .num_resources = ARRAY_SIZE(da8xx_lcdc_resources), 682 - .resource = da8xx_lcdc_resources, 683 - .dev = { 684 - .coherent_dma_mask = DMA_BIT_MASK(32), 685 - } 686 - }; 687 - 688 - int __init da8xx_register_lcdc(struct da8xx_lcdc_platform_data *pdata) 689 - { 690 - da8xx_lcdc_device.dev.platform_data = pdata; 691 - return platform_device_register(&da8xx_lcdc_device); 692 - } 693 - 694 - static struct resource da8xx_gpio_resources[] = { 695 - { /* registers */ 696 - .start = DA8XX_GPIO_BASE, 697 - .end = DA8XX_GPIO_BASE + SZ_4K - 1, 698 - .flags = IORESOURCE_MEM, 699 - }, 700 - { /* interrupt */ 701 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO0), 702 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO0), 703 - .flags = IORESOURCE_IRQ, 704 - }, 705 - { 706 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO1), 707 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO1), 708 - .flags = IORESOURCE_IRQ, 709 - }, 710 - { 711 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO2), 712 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO2), 713 - .flags = IORESOURCE_IRQ, 714 - }, 715 - { 716 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO3), 717 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO3), 718 - .flags = IORESOURCE_IRQ, 719 - }, 720 - { 721 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO4), 722 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO4), 723 - .flags = IORESOURCE_IRQ, 724 - }, 725 - { 726 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO5), 727 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO5), 728 - .flags = IORESOURCE_IRQ, 729 - }, 730 - { 731 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO6), 732 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO6), 733 - .flags = IORESOURCE_IRQ, 734 - }, 735 - { 736 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO7), 737 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO7), 738 - .flags = IORESOURCE_IRQ, 739 - }, 740 - { 741 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO8), 742 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_GPIO8), 743 - .flags = IORESOURCE_IRQ, 744 - }, 745 - }; 746 - 747 - static struct platform_device da8xx_gpio_device = { 748 - .name = "davinci_gpio", 749 - .id = -1, 750 - .num_resources = ARRAY_SIZE(da8xx_gpio_resources), 751 - .resource = da8xx_gpio_resources, 752 - }; 753 - 754 - int __init da8xx_register_gpio(void *pdata) 755 - { 756 - da8xx_gpio_device.dev.platform_data = pdata; 757 - return platform_device_register(&da8xx_gpio_device); 758 - } 759 - 760 - static struct resource da8xx_mmcsd0_resources[] = { 761 - { /* registers */ 762 - .start = DA8XX_MMCSD0_BASE, 763 - .end = DA8XX_MMCSD0_BASE + SZ_4K - 1, 764 - .flags = IORESOURCE_MEM, 765 - }, 766 - { /* interrupt */ 767 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_MMCSDINT0), 768 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_MMCSDINT0), 769 - .flags = IORESOURCE_IRQ, 770 - }, 771 - }; 772 - 773 - static struct platform_device da8xx_mmcsd0_device = { 774 - .name = "da830-mmc", 775 - .id = 0, 776 - .num_resources = ARRAY_SIZE(da8xx_mmcsd0_resources), 777 - .resource = da8xx_mmcsd0_resources, 778 - }; 779 - 780 - int __init da8xx_register_mmcsd0(struct davinci_mmc_config *config) 781 - { 782 - da8xx_mmcsd0_device.dev.platform_data = config; 783 - return platform_device_register(&da8xx_mmcsd0_device); 784 - } 785 - 786 - #ifdef CONFIG_ARCH_DAVINCI_DA850 787 - static struct resource da850_mmcsd1_resources[] = { 788 - { /* registers */ 789 - .start = DA850_MMCSD1_BASE, 790 - .end = DA850_MMCSD1_BASE + SZ_4K - 1, 791 - .flags = IORESOURCE_MEM, 792 - }, 793 - { /* interrupt */ 794 - .start = DAVINCI_INTC_IRQ(IRQ_DA850_MMCSDINT0_1), 795 - .end = DAVINCI_INTC_IRQ(IRQ_DA850_MMCSDINT0_1), 796 - .flags = IORESOURCE_IRQ, 797 - }, 798 - }; 799 - 800 - static struct platform_device da850_mmcsd1_device = { 801 - .name = "da830-mmc", 802 - .id = 1, 803 - .num_resources = ARRAY_SIZE(da850_mmcsd1_resources), 804 - .resource = da850_mmcsd1_resources, 805 - }; 806 - 807 - int __init da850_register_mmcsd1(struct davinci_mmc_config *config) 808 - { 809 - da850_mmcsd1_device.dev.platform_data = config; 810 - return platform_device_register(&da850_mmcsd1_device); 811 - } 812 - #endif 813 - 814 - static struct resource da8xx_rproc_resources[] = { 815 - { /* DSP boot address */ 816 - .name = "host1cfg", 817 - .start = DA8XX_SYSCFG0_BASE + DA8XX_HOST1CFG_REG, 818 - .end = DA8XX_SYSCFG0_BASE + DA8XX_HOST1CFG_REG + 3, 819 - .flags = IORESOURCE_MEM, 820 - }, 821 - { /* DSP interrupt registers */ 822 - .name = "chipsig", 823 - .start = DA8XX_SYSCFG0_BASE + DA8XX_CHIPSIG_REG, 824 - .end = DA8XX_SYSCFG0_BASE + DA8XX_CHIPSIG_REG + 7, 825 - .flags = IORESOURCE_MEM, 826 - }, 827 - { /* DSP L2 RAM */ 828 - .name = "l2sram", 829 - .start = DA8XX_DSP_L2_RAM_BASE, 830 - .end = DA8XX_DSP_L2_RAM_BASE + SZ_256K - 1, 831 - .flags = IORESOURCE_MEM, 832 - }, 833 - { /* DSP L1P RAM */ 834 - .name = "l1pram", 835 - .start = DA8XX_DSP_L1P_RAM_BASE, 836 - .end = DA8XX_DSP_L1P_RAM_BASE + SZ_32K - 1, 837 - .flags = IORESOURCE_MEM, 838 - }, 839 - { /* DSP L1D RAM */ 840 - .name = "l1dram", 841 - .start = DA8XX_DSP_L1D_RAM_BASE, 842 - .end = DA8XX_DSP_L1D_RAM_BASE + SZ_32K - 1, 843 - .flags = IORESOURCE_MEM, 844 - }, 845 - { /* dsp irq */ 846 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_CHIPINT0), 847 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_CHIPINT0), 848 - .flags = IORESOURCE_IRQ, 849 - }, 850 - }; 851 - 852 - static struct platform_device da8xx_dsp = { 853 - .name = "davinci-rproc", 854 - .dev = { 855 - .coherent_dma_mask = DMA_BIT_MASK(32), 856 - }, 857 - .num_resources = ARRAY_SIZE(da8xx_rproc_resources), 858 - .resource = da8xx_rproc_resources, 859 - }; 860 - 861 - static bool rproc_mem_inited __initdata; 862 - 863 - #if IS_ENABLED(CONFIG_DA8XX_REMOTEPROC) 864 - 865 - static phys_addr_t rproc_base __initdata; 866 - static unsigned long rproc_size __initdata; 867 - 868 - static int __init early_rproc_mem(char *p) 869 - { 870 - char *endp; 871 - 872 - if (p == NULL) 873 - return 0; 874 - 875 - rproc_size = memparse(p, &endp); 876 - if (*endp == '@') 877 - rproc_base = memparse(endp + 1, NULL); 878 - 879 - return 0; 880 - } 881 - early_param("rproc_mem", early_rproc_mem); 882 - 883 - void __init da8xx_rproc_reserve_cma(void) 884 - { 885 - struct cma *cma; 886 - int ret; 887 - 888 - if (!rproc_base || !rproc_size) { 889 - pr_err("%s: 'rproc_mem=nn@address' badly specified\n" 890 - " 'nn' and 'address' must both be non-zero\n", 891 - __func__); 892 - 893 - return; 894 - } 895 - 896 - pr_info("%s: reserving 0x%lx @ 0x%lx...\n", 897 - __func__, rproc_size, (unsigned long)rproc_base); 898 - 899 - ret = dma_contiguous_reserve_area(rproc_size, rproc_base, 0, &cma, 900 - true); 901 - if (ret) { 902 - pr_err("%s: dma_contiguous_reserve_area failed %d\n", 903 - __func__, ret); 904 - return; 905 - } 906 - da8xx_dsp.dev.cma_area = cma; 907 - rproc_mem_inited = true; 908 - } 909 - #else 910 - 911 - void __init da8xx_rproc_reserve_cma(void) 912 - { 913 - } 914 - 915 - #endif 916 - 917 - int __init da8xx_register_rproc(void) 918 - { 919 - int ret; 920 - 921 - if (!rproc_mem_inited) { 922 - pr_warn("%s: memory not reserved for DSP, not registering DSP device\n", 923 - __func__); 924 - return -ENOMEM; 925 - } 926 - 927 - ret = platform_device_register(&da8xx_dsp); 928 - if (ret) 929 - pr_err("%s: can't register DSP device: %d\n", __func__, ret); 930 - 931 - return ret; 932 - }; 933 - 934 - static struct resource da8xx_rtc_resources[] = { 935 - { 936 - .start = DA8XX_RTC_BASE, 937 - .end = DA8XX_RTC_BASE + SZ_4K - 1, 938 - .flags = IORESOURCE_MEM, 939 - }, 940 - { /* timer irq */ 941 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_RTC), 942 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_RTC), 943 - .flags = IORESOURCE_IRQ, 944 - }, 945 - { /* alarm irq */ 946 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_RTC), 947 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_RTC), 948 - .flags = IORESOURCE_IRQ, 949 - }, 950 - }; 951 - 952 - static struct platform_device da8xx_rtc_device = { 953 - .name = "da830-rtc", 954 - .id = -1, 955 - .num_resources = ARRAY_SIZE(da8xx_rtc_resources), 956 - .resource = da8xx_rtc_resources, 957 - }; 958 - 959 - int da8xx_register_rtc(void) 960 - { 961 - return platform_device_register(&da8xx_rtc_device); 962 - } 963 - 964 60 static void __iomem *da8xx_ddr2_ctlr_base; 965 61 void __iomem * __init da8xx_get_mem_ctlr(void) 966 62 { ··· 67 973 pr_warn("%s: Unable to map DDR2 controller", __func__); 68 974 69 975 return da8xx_ddr2_ctlr_base; 70 - } 71 - 72 - static struct resource da8xx_cpuidle_resources[] = { 73 - { 74 - .start = DA8XX_DDR2_CTL_BASE, 75 - .end = DA8XX_DDR2_CTL_BASE + SZ_32K - 1, 76 - .flags = IORESOURCE_MEM, 77 - }, 78 - }; 79 - 80 - /* DA8XX devices support DDR2 power down */ 81 - static struct davinci_cpuidle_config da8xx_cpuidle_pdata = { 82 - .ddr2_pdown = 1, 83 - }; 84 - 85 - 86 - static struct platform_device da8xx_cpuidle_device = { 87 - .name = "cpuidle-davinci", 88 - .num_resources = ARRAY_SIZE(da8xx_cpuidle_resources), 89 - .resource = da8xx_cpuidle_resources, 90 - .dev = { 91 - .platform_data = &da8xx_cpuidle_pdata, 92 - }, 93 - }; 94 - 95 - int __init da8xx_register_cpuidle(void) 96 - { 97 - da8xx_cpuidle_pdata.ddr2_ctlr_base = da8xx_get_mem_ctlr(); 98 - 99 - return platform_device_register(&da8xx_cpuidle_device); 100 - } 101 - 102 - static struct resource da8xx_spi0_resources[] = { 103 - [0] = { 104 - .start = DA8XX_SPI0_BASE, 105 - .end = DA8XX_SPI0_BASE + SZ_4K - 1, 106 - .flags = IORESOURCE_MEM, 107 - }, 108 - [1] = { 109 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_SPINT0), 110 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_SPINT0), 111 - .flags = IORESOURCE_IRQ, 112 - }, 113 - }; 114 - 115 - static struct resource da8xx_spi1_resources[] = { 116 - [0] = { 117 - .start = DA830_SPI1_BASE, 118 - .end = DA830_SPI1_BASE + SZ_4K - 1, 119 - .flags = IORESOURCE_MEM, 120 - }, 121 - [1] = { 122 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_SPINT1), 123 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_SPINT1), 124 - .flags = IORESOURCE_IRQ, 125 - }, 126 - }; 127 - 128 - static struct davinci_spi_platform_data da8xx_spi_pdata[] = { 129 - [0] = { 130 - .version = SPI_VERSION_2, 131 - .intr_line = 1, 132 - .dma_event_q = EVENTQ_0, 133 - .prescaler_limit = 2, 134 - }, 135 - [1] = { 136 - .version = SPI_VERSION_2, 137 - .intr_line = 1, 138 - .dma_event_q = EVENTQ_0, 139 - .prescaler_limit = 2, 140 - }, 141 - }; 142 - 143 - static struct platform_device da8xx_spi_device[] = { 144 - [0] = { 145 - .name = "spi_davinci", 146 - .id = 0, 147 - .num_resources = ARRAY_SIZE(da8xx_spi0_resources), 148 - .resource = da8xx_spi0_resources, 149 - .dev = { 150 - .platform_data = &da8xx_spi_pdata[0], 151 - }, 152 - }, 153 - [1] = { 154 - .name = "spi_davinci", 155 - .id = 1, 156 - .num_resources = ARRAY_SIZE(da8xx_spi1_resources), 157 - .resource = da8xx_spi1_resources, 158 - .dev = { 159 - .platform_data = &da8xx_spi_pdata[1], 160 - }, 161 - }, 162 - }; 163 - 164 - int __init da8xx_register_spi_bus(int instance, unsigned num_chipselect) 165 - { 166 - if (instance < 0 || instance > 1) 167 - return -EINVAL; 168 - 169 - da8xx_spi_pdata[instance].num_chipselect = num_chipselect; 170 - 171 - if (instance == 1 && cpu_is_davinci_da850()) { 172 - da8xx_spi1_resources[0].start = DA850_SPI1_BASE; 173 - da8xx_spi1_resources[0].end = DA850_SPI1_BASE + SZ_4K - 1; 174 - } 175 - 176 - return platform_device_register(&da8xx_spi_device[instance]); 177 - } 178 - 179 - #ifdef CONFIG_ARCH_DAVINCI_DA850 180 - int __init da850_register_sata_refclk(int rate) 181 - { 182 - struct clk *clk; 183 - 184 - clk = clk_register_fixed_rate(NULL, "sata_refclk", NULL, 0, rate); 185 - if (IS_ERR(clk)) 186 - return PTR_ERR(clk); 187 - 188 - return clk_register_clkdev(clk, "refclk", "ahci_da850"); 189 - } 190 - 191 - static struct resource da850_sata_resources[] = { 192 - { 193 - .start = DA850_SATA_BASE, 194 - .end = DA850_SATA_BASE + 0x1fff, 195 - .flags = IORESOURCE_MEM, 196 - }, 197 - { 198 - .start = DA8XX_SYSCFG1_BASE + DA8XX_PWRDN_REG, 199 - .end = DA8XX_SYSCFG1_BASE + DA8XX_PWRDN_REG + 0x3, 200 - .flags = IORESOURCE_MEM, 201 - }, 202 - { 203 - .start = DAVINCI_INTC_IRQ(IRQ_DA850_SATAINT), 204 - .flags = IORESOURCE_IRQ, 205 - }, 206 - }; 207 - 208 - static u64 da850_sata_dmamask = DMA_BIT_MASK(32); 209 - 210 - static struct platform_device da850_sata_device = { 211 - .name = "ahci_da850", 212 - .id = -1, 213 - .dev = { 214 - .dma_mask = &da850_sata_dmamask, 215 - .coherent_dma_mask = DMA_BIT_MASK(32), 216 - }, 217 - .num_resources = ARRAY_SIZE(da850_sata_resources), 218 - .resource = da850_sata_resources, 219 - }; 220 - 221 - int __init da850_register_sata(unsigned long refclkpn) 222 - { 223 - int ret; 224 - 225 - ret = da850_register_sata_refclk(refclkpn); 226 - if (ret) 227 - return ret; 228 - 229 - return platform_device_register(&da850_sata_device); 230 - } 231 - #endif 232 - 233 - static struct regmap *da8xx_cfgchip; 234 - 235 - static const struct regmap_config da8xx_cfgchip_config __initconst = { 236 - .name = "cfgchip", 237 - .reg_bits = 32, 238 - .val_bits = 32, 239 - .reg_stride = 4, 240 - .max_register = DA8XX_CFGCHIP4_REG - DA8XX_CFGCHIP0_REG, 241 - }; 242 - 243 - /** 244 - * da8xx_get_cfgchip - Lazy gets CFGCHIP as regmap 245 - * 246 - * This is for use on non-DT boards only. For DT boards, use 247 - * syscon_regmap_lookup_by_compatible("ti,da830-cfgchip") 248 - * 249 - * Returns: Pointer to the CFGCHIP regmap or negative error code. 250 - */ 251 - struct regmap * __init da8xx_get_cfgchip(void) 252 - { 253 - if (IS_ERR_OR_NULL(da8xx_cfgchip)) 254 - da8xx_cfgchip = regmap_init_mmio(NULL, 255 - DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP0_REG), 256 - &da8xx_cfgchip_config); 257 - 258 - return da8xx_cfgchip; 259 976 }
-217
arch/arm/mach-davinci/irqs.h
··· 27 27 #ifndef __ASM_ARCH_IRQS_H 28 28 #define __ASM_ARCH_IRQS_H 29 29 30 - /* Base address */ 31 - #define DAVINCI_ARM_INTC_BASE 0x01C48000 32 - 33 - /* Interrupt lines */ 34 - #define IRQ_VDINT0 0 35 - #define IRQ_VDINT1 1 36 - #define IRQ_VDINT2 2 37 - #define IRQ_HISTINT 3 38 - #define IRQ_H3AINT 4 39 - #define IRQ_PRVUINT 5 40 - #define IRQ_RSZINT 6 41 - #define IRQ_VFOCINT 7 42 - #define IRQ_VENCINT 8 43 - #define IRQ_ASQINT 9 44 - #define IRQ_IMXINT 10 45 - #define IRQ_VLCDINT 11 46 - #define IRQ_USBINT 12 47 - #define IRQ_EMACINT 13 48 - 49 - #define IRQ_CCINT0 16 50 - #define IRQ_CCERRINT 17 51 - #define IRQ_TCERRINT0 18 52 - #define IRQ_TCERRINT 19 53 - #define IRQ_PSCIN 20 54 - 55 - #define IRQ_IDE 22 56 - #define IRQ_HPIINT 23 57 - #define IRQ_MBXINT 24 58 - #define IRQ_MBRINT 25 59 - #define IRQ_MMCINT 26 60 - #define IRQ_SDIOINT 27 61 - #define IRQ_MSINT 28 62 - #define IRQ_DDRINT 29 63 - #define IRQ_AEMIFINT 30 64 - #define IRQ_VLQINT 31 65 - #define IRQ_TINT0_TINT12 32 66 - #define IRQ_TINT0_TINT34 33 67 - #define IRQ_TINT1_TINT12 34 68 - #define IRQ_TINT1_TINT34 35 69 - #define IRQ_PWMINT0 36 70 - #define IRQ_PWMINT1 37 71 - #define IRQ_PWMINT2 38 72 - #define IRQ_I2C 39 73 - #define IRQ_UARTINT0 40 74 - #define IRQ_UARTINT1 41 75 - #define IRQ_UARTINT2 42 76 - #define IRQ_SPINT0 43 77 - #define IRQ_SPINT1 44 78 - 79 - #define IRQ_DSP2ARM0 46 80 - #define IRQ_DSP2ARM1 47 81 - #define IRQ_GPIO0 48 82 - #define IRQ_GPIO1 49 83 - #define IRQ_GPIO2 50 84 - #define IRQ_GPIO3 51 85 - #define IRQ_GPIO4 52 86 - #define IRQ_GPIO5 53 87 - #define IRQ_GPIO6 54 88 - #define IRQ_GPIO7 55 89 - #define IRQ_GPIOBNK0 56 90 - #define IRQ_GPIOBNK1 57 91 - #define IRQ_GPIOBNK2 58 92 - #define IRQ_GPIOBNK3 59 93 - #define IRQ_GPIOBNK4 60 94 - #define IRQ_COMMTX 61 95 - #define IRQ_COMMRX 62 96 - #define IRQ_EMUINT 63 97 - 98 - #define DAVINCI_N_AINTC_IRQ 64 99 - 100 - #define ARCH_TIMER_IRQ IRQ_TINT1_TINT34 101 - 102 - /* DaVinci DM6467-specific Interrupts */ 103 - #define IRQ_DM646X_VP_VERTINT0 0 104 - #define IRQ_DM646X_VP_VERTINT1 1 105 - #define IRQ_DM646X_VP_VERTINT2 2 106 - #define IRQ_DM646X_VP_VERTINT3 3 107 - #define IRQ_DM646X_VP_ERRINT 4 108 - #define IRQ_DM646X_RESERVED_1 5 109 - #define IRQ_DM646X_RESERVED_2 6 110 - #define IRQ_DM646X_WDINT 7 111 - #define IRQ_DM646X_CRGENINT0 8 112 - #define IRQ_DM646X_CRGENINT1 9 113 - #define IRQ_DM646X_TSIFINT0 10 114 - #define IRQ_DM646X_TSIFINT1 11 115 - #define IRQ_DM646X_VDCEINT 12 116 - #define IRQ_DM646X_USBINT 13 117 - #define IRQ_DM646X_USBDMAINT 14 118 - #define IRQ_DM646X_PCIINT 15 119 - #define IRQ_DM646X_TCERRINT2 20 120 - #define IRQ_DM646X_TCERRINT3 21 121 - #define IRQ_DM646X_IDE 22 122 - #define IRQ_DM646X_HPIINT 23 123 - #define IRQ_DM646X_EMACRXTHINT 24 124 - #define IRQ_DM646X_EMACRXINT 25 125 - #define IRQ_DM646X_EMACTXINT 26 126 - #define IRQ_DM646X_EMACMISCINT 27 127 - #define IRQ_DM646X_MCASP0TXINT 28 128 - #define IRQ_DM646X_MCASP0RXINT 29 129 - #define IRQ_DM646X_MCASP1TXINT 30 130 - #define IRQ_DM646X_RESERVED_3 31 131 - #define IRQ_DM646X_VLQINT 38 132 - #define IRQ_DM646X_UARTINT2 42 133 - #define IRQ_DM646X_SPINT0 43 134 - #define IRQ_DM646X_SPINT1 44 135 - #define IRQ_DM646X_DSP2ARMINT 45 136 - #define IRQ_DM646X_RESERVED_4 46 137 - #define IRQ_DM646X_PSCINT 47 138 - #define IRQ_DM646X_GPIO0 48 139 - #define IRQ_DM646X_GPIO1 49 140 - #define IRQ_DM646X_GPIO2 50 141 - #define IRQ_DM646X_GPIO3 51 142 - #define IRQ_DM646X_GPIO4 52 143 - #define IRQ_DM646X_GPIO5 53 144 - #define IRQ_DM646X_GPIO6 54 145 - #define IRQ_DM646X_GPIO7 55 146 - #define IRQ_DM646X_GPIOBNK0 56 147 - #define IRQ_DM646X_GPIOBNK1 57 148 - #define IRQ_DM646X_GPIOBNK2 58 149 - #define IRQ_DM646X_DDRINT 59 150 - #define IRQ_DM646X_AEMIFINT 60 151 - 152 - /* DaVinci DM355-specific Interrupts */ 153 - #define IRQ_DM355_CCDC_VDINT0 0 154 - #define IRQ_DM355_CCDC_VDINT1 1 155 - #define IRQ_DM355_CCDC_VDINT2 2 156 - #define IRQ_DM355_IPIPE_HST 3 157 - #define IRQ_DM355_H3AINT 4 158 - #define IRQ_DM355_IPIPE_SDR 5 159 - #define IRQ_DM355_IPIPEIFINT 6 160 - #define IRQ_DM355_OSDINT 7 161 - #define IRQ_DM355_VENCINT 8 162 - #define IRQ_DM355_IMCOPINT 11 163 - #define IRQ_DM355_RTOINT 13 164 - #define IRQ_DM355_TINT4 13 165 - #define IRQ_DM355_TINT2_TINT12 13 166 - #define IRQ_DM355_UARTINT2 14 167 - #define IRQ_DM355_TINT5 14 168 - #define IRQ_DM355_TINT2_TINT34 14 169 - #define IRQ_DM355_TINT6 15 170 - #define IRQ_DM355_TINT3_TINT12 15 171 - #define IRQ_DM355_SPINT1_0 17 172 - #define IRQ_DM355_SPINT1_1 18 173 - #define IRQ_DM355_SPINT2_0 19 174 - #define IRQ_DM355_SPINT2_1 21 175 - #define IRQ_DM355_TINT7 22 176 - #define IRQ_DM355_TINT3_TINT34 22 177 - #define IRQ_DM355_SDIOINT0 23 178 - #define IRQ_DM355_MMCINT0 26 179 - #define IRQ_DM355_MSINT 26 180 - #define IRQ_DM355_MMCINT1 27 181 - #define IRQ_DM355_PWMINT3 28 182 - #define IRQ_DM355_SDIOINT1 31 183 - #define IRQ_DM355_SPINT0_0 42 184 - #define IRQ_DM355_SPINT0_1 43 185 - #define IRQ_DM355_GPIO0 44 186 - #define IRQ_DM355_GPIO1 45 187 - #define IRQ_DM355_GPIO2 46 188 - #define IRQ_DM355_GPIO3 47 189 - #define IRQ_DM355_GPIO4 48 190 - #define IRQ_DM355_GPIO5 49 191 - #define IRQ_DM355_GPIO6 50 192 - #define IRQ_DM355_GPIO7 51 193 - #define IRQ_DM355_GPIO8 52 194 - #define IRQ_DM355_GPIO9 53 195 - #define IRQ_DM355_GPIOBNK0 54 196 - #define IRQ_DM355_GPIOBNK1 55 197 - #define IRQ_DM355_GPIOBNK2 56 198 - #define IRQ_DM355_GPIOBNK3 57 199 - #define IRQ_DM355_GPIOBNK4 58 200 - #define IRQ_DM355_GPIOBNK5 59 201 - #define IRQ_DM355_GPIOBNK6 60 202 - 203 - /* DaVinci DM365-specific Interrupts */ 204 - #define IRQ_DM365_INSFINT 7 205 - #define IRQ_DM365_IMXINT1 8 206 - #define IRQ_DM365_IMXINT0 10 207 - #define IRQ_DM365_KLD_ARMINT 10 208 - #define IRQ_DM365_IMCOPINT 11 209 - #define IRQ_DM365_RTOINT 13 210 - #define IRQ_DM365_TINT5 14 211 - #define IRQ_DM365_TINT6 15 212 - #define IRQ_DM365_SPINT2_1 21 213 - #define IRQ_DM365_TINT7 22 214 - #define IRQ_DM365_SDIOINT0 23 215 - #define IRQ_DM365_MMCINT1 27 216 - #define IRQ_DM365_PWMINT3 28 217 - #define IRQ_DM365_RTCINT 29 218 - #define IRQ_DM365_SDIOINT1 31 219 - #define IRQ_DM365_SPIINT0_0 42 220 - #define IRQ_DM365_SPIINT3_0 43 221 - #define IRQ_DM365_GPIO0 44 222 - #define IRQ_DM365_GPIO1 45 223 - #define IRQ_DM365_GPIO2 46 224 - #define IRQ_DM365_GPIO3 47 225 - #define IRQ_DM365_GPIO4 48 226 - #define IRQ_DM365_GPIO5 49 227 - #define IRQ_DM365_GPIO6 50 228 - #define IRQ_DM365_GPIO7 51 229 - #define IRQ_DM365_EMAC_RXTHRESH 52 230 - #define IRQ_DM365_EMAC_RXPULSE 53 231 - #define IRQ_DM365_EMAC_TXPULSE 54 232 - #define IRQ_DM365_EMAC_MISCPULSE 55 233 - #define IRQ_DM365_GPIO12 56 234 - #define IRQ_DM365_GPIO13 57 235 - #define IRQ_DM365_GPIO14 58 236 - #define IRQ_DM365_GPIO15 59 237 - #define IRQ_DM365_ADCINT 59 238 - #define IRQ_DM365_KEYINT 60 239 - #define IRQ_DM365_TCERRINT2 61 240 - #define IRQ_DM365_TCERRINT3 62 241 - #define IRQ_DM365_EMUINT 63 242 - 243 30 /* DA8XX interrupts */ 244 31 #define IRQ_DA8XX_COMMTX 0 245 32 #define IRQ_DA8XX_COMMRX 1 ··· 184 397 #define IRQ_DA850_MCBSP1XINT 100 185 398 186 399 #define DA850_N_CP_INTC_IRQ 101 187 - 188 - /* da850 currently has the most gpio pins (144) */ 189 - #define DAVINCI_N_GPIO 144 190 - /* da850 currently has the most irqs so use DA850_N_CP_INTC_IRQ */ 191 400 192 401 #endif /* __ASM_ARCH_IRQS_H */
-15
arch/arm/mach-davinci/mux.c
··· 97 97 98 98 return 0; 99 99 } 100 - EXPORT_SYMBOL(davinci_cfg_reg); 101 - 102 - int davinci_cfg_reg_list(const short pins[]) 103 - { 104 - int i, error = -EINVAL; 105 - 106 - if (pins) 107 - for (i = 0; pins[i] >= 0; i++) { 108 - error = davinci_cfg_reg(pins[i]); 109 - if (error) 110 - break; 111 - } 112 - 113 - return error; 114 - }
-315
arch/arm/mach-davinci/mux.h
··· 21 21 bool debug; 22 22 }; 23 23 24 - enum davinci_dm644x_index { 25 - /* ATA and HDDIR functions */ 26 - DM644X_HDIREN, 27 - DM644X_ATAEN, 28 - DM644X_ATAEN_DISABLE, 29 - 30 - /* HPI functions */ 31 - DM644X_HPIEN_DISABLE, 32 - 33 - /* AEAW functions */ 34 - DM644X_AEAW, 35 - DM644X_AEAW0, 36 - DM644X_AEAW1, 37 - DM644X_AEAW2, 38 - DM644X_AEAW3, 39 - DM644X_AEAW4, 40 - 41 - /* Memory Stick */ 42 - DM644X_MSTK, 43 - 44 - /* I2C */ 45 - DM644X_I2C, 46 - 47 - /* ASP function */ 48 - DM644X_MCBSP, 49 - 50 - /* UART1 */ 51 - DM644X_UART1, 52 - 53 - /* UART2 */ 54 - DM644X_UART2, 55 - 56 - /* PWM0 */ 57 - DM644X_PWM0, 58 - 59 - /* PWM1 */ 60 - DM644X_PWM1, 61 - 62 - /* PWM2 */ 63 - DM644X_PWM2, 64 - 65 - /* VLYNQ function */ 66 - DM644X_VLYNQEN, 67 - DM644X_VLSCREN, 68 - DM644X_VLYNQWD, 69 - 70 - /* EMAC and MDIO function */ 71 - DM644X_EMACEN, 72 - 73 - /* GPIO3V[0:16] pins */ 74 - DM644X_GPIO3V, 75 - 76 - /* GPIO pins */ 77 - DM644X_GPIO0, 78 - DM644X_GPIO3, 79 - DM644X_GPIO43_44, 80 - DM644X_GPIO46_47, 81 - 82 - /* VPBE */ 83 - DM644X_RGB666, 84 - 85 - /* LCD */ 86 - DM644X_LOEEN, 87 - DM644X_LFLDEN, 88 - }; 89 - 90 - enum davinci_dm646x_index { 91 - /* ATA function */ 92 - DM646X_ATAEN, 93 - 94 - /* AUDIO Clock */ 95 - DM646X_AUDCK1, 96 - DM646X_AUDCK0, 97 - 98 - /* CRGEN Control */ 99 - DM646X_CRGMUX, 100 - 101 - /* VPIF Control */ 102 - DM646X_STSOMUX_DISABLE, 103 - DM646X_STSIMUX_DISABLE, 104 - DM646X_PTSOMUX_DISABLE, 105 - DM646X_PTSIMUX_DISABLE, 106 - 107 - /* TSIF Control */ 108 - DM646X_STSOMUX, 109 - DM646X_STSIMUX, 110 - DM646X_PTSOMUX_PARALLEL, 111 - DM646X_PTSIMUX_PARALLEL, 112 - DM646X_PTSOMUX_SERIAL, 113 - DM646X_PTSIMUX_SERIAL, 114 - }; 115 - 116 - enum davinci_dm355_index { 117 - /* MMC/SD 0 */ 118 - DM355_MMCSD0, 119 - 120 - /* MMC/SD 1 */ 121 - DM355_SD1_CLK, 122 - DM355_SD1_CMD, 123 - DM355_SD1_DATA3, 124 - DM355_SD1_DATA2, 125 - DM355_SD1_DATA1, 126 - DM355_SD1_DATA0, 127 - 128 - /* I2C */ 129 - DM355_I2C_SDA, 130 - DM355_I2C_SCL, 131 - 132 - /* ASP0 function */ 133 - DM355_MCBSP0_BDX, 134 - DM355_MCBSP0_X, 135 - DM355_MCBSP0_BFSX, 136 - DM355_MCBSP0_BDR, 137 - DM355_MCBSP0_R, 138 - DM355_MCBSP0_BFSR, 139 - 140 - /* SPI0 */ 141 - DM355_SPI0_SDI, 142 - DM355_SPI0_SDENA0, 143 - DM355_SPI0_SDENA1, 144 - 145 - /* IRQ muxing */ 146 - DM355_INT_EDMA_CC, 147 - DM355_INT_EDMA_TC0_ERR, 148 - DM355_INT_EDMA_TC1_ERR, 149 - 150 - /* EDMA event muxing */ 151 - DM355_EVT8_ASP1_TX, 152 - DM355_EVT9_ASP1_RX, 153 - DM355_EVT26_MMC0_RX, 154 - 155 - /* Video Out */ 156 - DM355_VOUT_FIELD, 157 - DM355_VOUT_FIELD_G70, 158 - DM355_VOUT_HVSYNC, 159 - DM355_VOUT_COUTL_EN, 160 - DM355_VOUT_COUTH_EN, 161 - 162 - /* Video In Pin Mux */ 163 - DM355_VIN_PCLK, 164 - DM355_VIN_CAM_WEN, 165 - DM355_VIN_CAM_VD, 166 - DM355_VIN_CAM_HD, 167 - DM355_VIN_YIN_EN, 168 - DM355_VIN_CINL_EN, 169 - DM355_VIN_CINH_EN, 170 - }; 171 - 172 - enum davinci_dm365_index { 173 - /* MMC/SD 0 */ 174 - DM365_MMCSD0, 175 - 176 - /* MMC/SD 1 */ 177 - DM365_SD1_CLK, 178 - DM365_SD1_CMD, 179 - DM365_SD1_DATA3, 180 - DM365_SD1_DATA2, 181 - DM365_SD1_DATA1, 182 - DM365_SD1_DATA0, 183 - 184 - /* I2C */ 185 - DM365_I2C_SDA, 186 - DM365_I2C_SCL, 187 - 188 - /* AEMIF */ 189 - DM365_AEMIF_AR_A14, 190 - DM365_AEMIF_AR_BA0, 191 - DM365_AEMIF_A3, 192 - DM365_AEMIF_A7, 193 - DM365_AEMIF_D15_8, 194 - DM365_AEMIF_CE0, 195 - DM365_AEMIF_CE1, 196 - DM365_AEMIF_WE_OE, 197 - 198 - /* ASP0 function */ 199 - DM365_MCBSP0_BDX, 200 - DM365_MCBSP0_X, 201 - DM365_MCBSP0_BFSX, 202 - DM365_MCBSP0_BDR, 203 - DM365_MCBSP0_R, 204 - DM365_MCBSP0_BFSR, 205 - 206 - /* SPI0 */ 207 - DM365_SPI0_SCLK, 208 - DM365_SPI0_SDI, 209 - DM365_SPI0_SDO, 210 - DM365_SPI0_SDENA0, 211 - DM365_SPI0_SDENA1, 212 - 213 - /* UART */ 214 - DM365_UART0_RXD, 215 - DM365_UART0_TXD, 216 - DM365_UART1_RXD, 217 - DM365_UART1_TXD, 218 - DM365_UART1_RTS, 219 - DM365_UART1_CTS, 220 - 221 - /* EMAC */ 222 - DM365_EMAC_TX_EN, 223 - DM365_EMAC_TX_CLK, 224 - DM365_EMAC_COL, 225 - DM365_EMAC_TXD3, 226 - DM365_EMAC_TXD2, 227 - DM365_EMAC_TXD1, 228 - DM365_EMAC_TXD0, 229 - DM365_EMAC_RXD3, 230 - DM365_EMAC_RXD2, 231 - DM365_EMAC_RXD1, 232 - DM365_EMAC_RXD0, 233 - DM365_EMAC_RX_CLK, 234 - DM365_EMAC_RX_DV, 235 - DM365_EMAC_RX_ER, 236 - DM365_EMAC_CRS, 237 - DM365_EMAC_MDIO, 238 - DM365_EMAC_MDCLK, 239 - 240 - /* Key Scan */ 241 - DM365_KEYSCAN, 242 - 243 - /* PWM */ 244 - DM365_PWM0, 245 - DM365_PWM0_G23, 246 - DM365_PWM1, 247 - DM365_PWM1_G25, 248 - DM365_PWM2_G87, 249 - DM365_PWM2_G88, 250 - DM365_PWM2_G89, 251 - DM365_PWM2_G90, 252 - DM365_PWM3_G80, 253 - DM365_PWM3_G81, 254 - DM365_PWM3_G85, 255 - DM365_PWM3_G86, 256 - 257 - /* SPI1 */ 258 - DM365_SPI1_SCLK, 259 - DM365_SPI1_SDO, 260 - DM365_SPI1_SDI, 261 - DM365_SPI1_SDENA0, 262 - DM365_SPI1_SDENA1, 263 - 264 - /* SPI2 */ 265 - DM365_SPI2_SCLK, 266 - DM365_SPI2_SDO, 267 - DM365_SPI2_SDI, 268 - DM365_SPI2_SDENA0, 269 - DM365_SPI2_SDENA1, 270 - 271 - /* SPI3 */ 272 - DM365_SPI3_SCLK, 273 - DM365_SPI3_SDO, 274 - DM365_SPI3_SDI, 275 - DM365_SPI3_SDENA0, 276 - DM365_SPI3_SDENA1, 277 - 278 - /* SPI4 */ 279 - DM365_SPI4_SCLK, 280 - DM365_SPI4_SDO, 281 - DM365_SPI4_SDI, 282 - DM365_SPI4_SDENA0, 283 - DM365_SPI4_SDENA1, 284 - 285 - /* Clock */ 286 - DM365_CLKOUT0, 287 - DM365_CLKOUT1, 288 - DM365_CLKOUT2, 289 - 290 - /* GPIO */ 291 - DM365_GPIO20, 292 - DM365_GPIO30, 293 - DM365_GPIO31, 294 - DM365_GPIO32, 295 - DM365_GPIO33, 296 - DM365_GPIO40, 297 - DM365_GPIO64_57, 298 - 299 - /* Video */ 300 - DM365_VOUT_FIELD, 301 - DM365_VOUT_FIELD_G81, 302 - DM365_VOUT_HVSYNC, 303 - DM365_VOUT_COUTL_EN, 304 - DM365_VOUT_COUTH_EN, 305 - DM365_VIN_CAM_WEN, 306 - DM365_VIN_CAM_VD, 307 - DM365_VIN_CAM_HD, 308 - DM365_VIN_YIN4_7_EN, 309 - DM365_VIN_YIN0_3_EN, 310 - 311 - /* IRQ muxing */ 312 - DM365_INT_EDMA_CC, 313 - DM365_INT_EDMA_TC0_ERR, 314 - DM365_INT_EDMA_TC1_ERR, 315 - DM365_INT_EDMA_TC2_ERR, 316 - DM365_INT_EDMA_TC3_ERR, 317 - DM365_INT_PRTCSS, 318 - DM365_INT_EMAC_RXTHRESH, 319 - DM365_INT_EMAC_RXPULSE, 320 - DM365_INT_EMAC_TXPULSE, 321 - DM365_INT_EMAC_MISCPULSE, 322 - DM365_INT_IMX0_ENABLE, 323 - DM365_INT_IMX0_DISABLE, 324 - DM365_INT_HDVICP_ENABLE, 325 - DM365_INT_HDVICP_DISABLE, 326 - DM365_INT_IMX1_ENABLE, 327 - DM365_INT_IMX1_DISABLE, 328 - DM365_INT_NSF_ENABLE, 329 - DM365_INT_NSF_DISABLE, 330 - 331 - /* EDMA event muxing */ 332 - DM365_EVT2_ASP_TX, 333 - DM365_EVT3_ASP_RX, 334 - DM365_EVT2_VC_TX, 335 - DM365_EVT3_VC_RX, 336 - DM365_EVT26_MMC0_RX, 337 - }; 338 - 339 24 enum da830_index { 340 25 DA830_GPIO7_14, 341 26 DA830_RTCK,
-64
arch/arm/mach-davinci/psc.h
··· 70 70 #define DAVINCI_LPSC_GEM 39 71 71 #define DAVINCI_LPSC_IMCOP 40 72 72 73 - #define DM355_LPSC_TIMER3 5 74 - #define DM355_LPSC_SPI1 6 75 - #define DM355_LPSC_MMC_SD1 7 76 - #define DM355_LPSC_McBSP1 8 77 - #define DM355_LPSC_PWM3 10 78 - #define DM355_LPSC_SPI2 11 79 - #define DM355_LPSC_RTO 12 80 - #define DM355_LPSC_VPSS_DAC 41 81 - 82 - /* DM365 */ 83 - #define DM365_LPSC_TIMER3 5 84 - #define DM365_LPSC_SPI1 6 85 - #define DM365_LPSC_MMC_SD1 7 86 - #define DM365_LPSC_McBSP1 8 87 - #define DM365_LPSC_PWM3 10 88 - #define DM365_LPSC_SPI2 11 89 - #define DM365_LPSC_RTO 12 90 - #define DM365_LPSC_TIMER4 17 91 - #define DM365_LPSC_SPI0 22 92 - #define DM365_LPSC_SPI3 38 93 - #define DM365_LPSC_SPI4 39 94 - #define DM365_LPSC_EMAC 40 95 - #define DM365_LPSC_VOICE_CODEC 44 96 - #define DM365_LPSC_DAC_CLK 46 97 - #define DM365_LPSC_VPSSMSTR 47 98 - #define DM365_LPSC_MJCP 50 99 - 100 - /* 101 - * LPSC Assignments 102 - */ 103 - #define DM646X_LPSC_ARM 0 104 - #define DM646X_LPSC_C64X_CPU 1 105 - #define DM646X_LPSC_HDVICP0 2 106 - #define DM646X_LPSC_HDVICP1 3 107 - #define DM646X_LPSC_TPCC 4 108 - #define DM646X_LPSC_TPTC0 5 109 - #define DM646X_LPSC_TPTC1 6 110 - #define DM646X_LPSC_TPTC2 7 111 - #define DM646X_LPSC_TPTC3 8 112 - #define DM646X_LPSC_PCI 13 113 - #define DM646X_LPSC_EMAC 14 114 - #define DM646X_LPSC_VDCE 15 115 - #define DM646X_LPSC_VPSSMSTR 16 116 - #define DM646X_LPSC_VPSSSLV 17 117 - #define DM646X_LPSC_TSIF0 18 118 - #define DM646X_LPSC_TSIF1 19 119 - #define DM646X_LPSC_DDR_EMIF 20 120 - #define DM646X_LPSC_AEMIF 21 121 - #define DM646X_LPSC_McASP0 22 122 - #define DM646X_LPSC_McASP1 23 123 - #define DM646X_LPSC_CRGEN0 24 124 - #define DM646X_LPSC_CRGEN1 25 125 - #define DM646X_LPSC_UART0 26 126 - #define DM646X_LPSC_UART1 27 127 - #define DM646X_LPSC_UART2 28 128 - #define DM646X_LPSC_PWM0 29 129 - #define DM646X_LPSC_PWM1 30 130 - #define DM646X_LPSC_I2C 31 131 - #define DM646X_LPSC_SPI 32 132 - #define DM646X_LPSC_GPIO 33 133 - #define DM646X_LPSC_TIMER0 34 134 - #define DM646X_LPSC_TIMER1 35 135 - #define DM646X_LPSC_ARM_INTC 45 136 - 137 73 /* PSC0 defines */ 138 74 #define DA8XX_LPSC0_TPCC 0 139 75 #define DA8XX_LPSC0_TPTC0 1
-88
arch/arm/mach-davinci/serial.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-or-later 2 - /* 3 - * TI DaVinci serial driver 4 - * 5 - * Copyright (C) 2006 Texas Instruments. 6 - */ 7 - 8 - #include <linux/kernel.h> 9 - #include <linux/init.h> 10 - #include <linux/serial_8250.h> 11 - #include <linux/serial_reg.h> 12 - #include <linux/platform_device.h> 13 - #include <linux/delay.h> 14 - #include <linux/clk.h> 15 - #include <linux/io.h> 16 - 17 - #include "serial.h" 18 - #include "cputype.h" 19 - 20 - static inline void serial_write_reg(struct plat_serial8250_port *p, int offset, 21 - int value) 22 - { 23 - offset <<= p->regshift; 24 - 25 - WARN_ONCE(!p->membase, "unmapped write: uart[%d]\n", offset); 26 - 27 - __raw_writel(value, p->membase + offset); 28 - } 29 - 30 - static void __init davinci_serial_reset(struct plat_serial8250_port *p) 31 - { 32 - unsigned int pwremu = 0; 33 - 34 - serial_write_reg(p, UART_IER, 0); /* disable all interrupts */ 35 - 36 - /* reset both transmitter and receiver: bits 14,13 = UTRST, URRST */ 37 - serial_write_reg(p, UART_DAVINCI_PWREMU, pwremu); 38 - mdelay(10); 39 - 40 - pwremu |= (0x3 << 13); 41 - pwremu |= 0x1; 42 - serial_write_reg(p, UART_DAVINCI_PWREMU, pwremu); 43 - } 44 - 45 - int __init davinci_serial_init(struct platform_device *serial_dev) 46 - { 47 - int i, ret = 0; 48 - struct device *dev; 49 - struct plat_serial8250_port *p; 50 - struct clk *clk; 51 - 52 - /* 53 - * Make sure the serial ports are muxed on at this point. 54 - * You have to mux them off in device drivers later on if not needed. 55 - */ 56 - for (i = 0; serial_dev[i].dev.platform_data != NULL; i++) { 57 - dev = &serial_dev[i].dev; 58 - p = dev->platform_data; 59 - 60 - ret = platform_device_register(&serial_dev[i]); 61 - if (ret) 62 - continue; 63 - 64 - clk = clk_get(dev, NULL); 65 - if (IS_ERR(clk)) { 66 - pr_err("%s:%d: failed to get UART%d clock\n", 67 - __func__, __LINE__, i); 68 - continue; 69 - } 70 - 71 - clk_prepare_enable(clk); 72 - 73 - p->uartclk = clk_get_rate(clk); 74 - 75 - if (!p->membase && p->mapbase) { 76 - p->membase = ioremap(p->mapbase, SZ_4K); 77 - 78 - if (p->membase) 79 - p->flags &= ~UPF_IOREMAP; 80 - else 81 - pr_err("uart regs ioremap failed\n"); 82 - } 83 - 84 - if (p->membase && p->type != PORT_AR7) 85 - davinci_serial_reset(p); 86 - } 87 - return ret; 88 - }
-35
arch/arm/mach-davinci/serial.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0-only */ 2 - /* 3 - * DaVinci serial device definitions 4 - * 5 - * Author: Kevin Hilman, MontaVista Software, Inc. <source@mvista.com> 6 - * 7 - * 2007 (c) MontaVista Software, Inc. 8 - */ 9 - #ifndef __ASM_ARCH_SERIAL_H 10 - #define __ASM_ARCH_SERIAL_H 11 - 12 - #include <asm/memory.h> 13 - 14 - #include "hardware.h" 15 - 16 - #define DAVINCI_UART0_BASE (IO_PHYS + 0x20000) 17 - #define DAVINCI_UART1_BASE (IO_PHYS + 0x20400) 18 - #define DAVINCI_UART2_BASE (IO_PHYS + 0x20800) 19 - 20 - #define DA8XX_UART0_BASE (IO_PHYS + 0x042000) 21 - #define DA8XX_UART1_BASE (IO_PHYS + 0x10c000) 22 - #define DA8XX_UART2_BASE (IO_PHYS + 0x10d000) 23 - 24 - /* DaVinci UART register offsets */ 25 - #define UART_DAVINCI_PWREMU 0x0c 26 - #define UART_DM646X_SCR 0x10 27 - #define UART_DM646X_SCR_TX_WATERMARK 0x08 28 - 29 - #ifndef __ASSEMBLY__ 30 - #include <linux/platform_device.h> 31 - 32 - extern int davinci_serial_init(struct platform_device *); 33 - #endif 34 - 35 - #endif /* __ASM_ARCH_SERIAL_H */
-146
arch/arm/mach-davinci/usb-da8xx.c
··· 1 - // SPDX-License-Identifier: GPL-2.0 2 - /* 3 - * DA8xx USB 4 - */ 5 - #include <linux/clk-provider.h> 6 - #include <linux/delay.h> 7 - #include <linux/dma-mapping.h> 8 - #include <linux/init.h> 9 - #include <linux/mfd/da8xx-cfgchip.h> 10 - #include <linux/mfd/syscon.h> 11 - #include <linux/phy/phy.h> 12 - #include <linux/platform_data/clk-da8xx-cfgchip.h> 13 - #include <linux/platform_data/phy-da8xx-usb.h> 14 - #include <linux/platform_data/usb-davinci.h> 15 - #include <linux/platform_device.h> 16 - #include <linux/usb/musb.h> 17 - 18 - #include "common.h" 19 - #include "cputype.h" 20 - #include "da8xx.h" 21 - #include "irqs.h" 22 - 23 - #define DA8XX_USB0_BASE 0x01e00000 24 - #define DA8XX_USB1_BASE 0x01e25000 25 - 26 - #ifndef CONFIG_COMMON_CLK 27 - static struct clk *usb20_clk; 28 - #endif 29 - 30 - static struct da8xx_usb_phy_platform_data da8xx_usb_phy_pdata; 31 - 32 - static struct platform_device da8xx_usb_phy = { 33 - .name = "da8xx-usb-phy", 34 - .id = -1, 35 - .dev = { 36 - /* 37 - * Setting init_name so that clock lookup will work in 38 - * da8xx_register_usb11_phy_clk() even if this device is not 39 - * registered yet. 40 - */ 41 - .init_name = "da8xx-usb-phy", 42 - .platform_data = &da8xx_usb_phy_pdata, 43 - }, 44 - }; 45 - 46 - int __init da8xx_register_usb_phy(void) 47 - { 48 - da8xx_usb_phy_pdata.cfgchip = da8xx_get_cfgchip(); 49 - 50 - return platform_device_register(&da8xx_usb_phy); 51 - } 52 - 53 - static struct musb_hdrc_config musb_config = { 54 - .multipoint = true, 55 - .num_eps = 5, 56 - .ram_bits = 10, 57 - }; 58 - 59 - static struct musb_hdrc_platform_data usb_data = { 60 - /* OTG requires a Mini-AB connector */ 61 - .mode = MUSB_OTG, 62 - .clock = "usb20", 63 - .config = &musb_config, 64 - }; 65 - 66 - static struct resource da8xx_usb20_resources[] = { 67 - { 68 - .start = DA8XX_USB0_BASE, 69 - .end = DA8XX_USB0_BASE + SZ_64K - 1, 70 - .flags = IORESOURCE_MEM, 71 - }, 72 - { 73 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_USB_INT), 74 - .flags = IORESOURCE_IRQ, 75 - .name = "mc", 76 - }, 77 - }; 78 - 79 - static u64 usb_dmamask = DMA_BIT_MASK(32); 80 - 81 - static struct platform_device da8xx_usb20_dev = { 82 - .name = "musb-da8xx", 83 - .id = -1, 84 - .dev = { 85 - .platform_data = &usb_data, 86 - .dma_mask = &usb_dmamask, 87 - .coherent_dma_mask = DMA_BIT_MASK(32), 88 - }, 89 - .resource = da8xx_usb20_resources, 90 - .num_resources = ARRAY_SIZE(da8xx_usb20_resources), 91 - }; 92 - 93 - int __init da8xx_register_usb20(unsigned int mA, unsigned int potpgt) 94 - { 95 - usb_data.power = mA > 510 ? 255 : mA / 2; 96 - usb_data.potpgt = (potpgt + 1) / 2; 97 - 98 - return platform_device_register(&da8xx_usb20_dev); 99 - } 100 - 101 - static struct resource da8xx_usb11_resources[] = { 102 - [0] = { 103 - .start = DA8XX_USB1_BASE, 104 - .end = DA8XX_USB1_BASE + SZ_4K - 1, 105 - .flags = IORESOURCE_MEM, 106 - }, 107 - [1] = { 108 - .start = DAVINCI_INTC_IRQ(IRQ_DA8XX_IRQN), 109 - .end = DAVINCI_INTC_IRQ(IRQ_DA8XX_IRQN), 110 - .flags = IORESOURCE_IRQ, 111 - }, 112 - }; 113 - 114 - static u64 da8xx_usb11_dma_mask = DMA_BIT_MASK(32); 115 - 116 - static struct platform_device da8xx_usb11_device = { 117 - .name = "ohci-da8xx", 118 - .id = -1, 119 - .dev = { 120 - .dma_mask = &da8xx_usb11_dma_mask, 121 - .coherent_dma_mask = DMA_BIT_MASK(32), 122 - }, 123 - .num_resources = ARRAY_SIZE(da8xx_usb11_resources), 124 - .resource = da8xx_usb11_resources, 125 - }; 126 - 127 - int __init da8xx_register_usb11(struct da8xx_ohci_root_hub *pdata) 128 - { 129 - da8xx_usb11_device.dev.platform_data = pdata; 130 - return platform_device_register(&da8xx_usb11_device); 131 - } 132 - 133 - static struct platform_device da8xx_usb_phy_clks_device = { 134 - .name = "da830-usb-phy-clks", 135 - .id = -1, 136 - }; 137 - 138 - int __init da8xx_register_usb_phy_clocks(void) 139 - { 140 - struct da8xx_cfgchip_clk_platform_data pdata; 141 - 142 - pdata.cfgchip = da8xx_get_cfgchip(); 143 - da8xx_usb_phy_clks_device.dev.platform_data = &pdata; 144 - 145 - return platform_device_register(&da8xx_usb_phy_clks_device); 146 - }
-74
arch/arm/mach-davinci/usb.c
··· 1 - // SPDX-License-Identifier: GPL-2.0 2 - /* 3 - * USB 4 - */ 5 - #include <linux/dma-mapping.h> 6 - #include <linux/init.h> 7 - #include <linux/platform_device.h> 8 - #include <linux/platform_data/usb-davinci.h> 9 - #include <linux/usb/musb.h> 10 - 11 - #include "common.h" 12 - #include "cputype.h" 13 - #include "irqs.h" 14 - 15 - #define DAVINCI_USB_OTG_BASE 0x01c64000 16 - 17 - #if IS_ENABLED(CONFIG_USB_MUSB_HDRC) 18 - static struct musb_hdrc_config musb_config = { 19 - .multipoint = true, 20 - 21 - .num_eps = 5, 22 - .ram_bits = 10, 23 - }; 24 - 25 - static struct musb_hdrc_platform_data usb_data = { 26 - /* OTG requires a Mini-AB connector */ 27 - .mode = MUSB_OTG, 28 - .clock = "usb", 29 - .config = &musb_config, 30 - }; 31 - 32 - static struct resource usb_resources[] = { 33 - { 34 - /* physical address */ 35 - .start = DAVINCI_USB_OTG_BASE, 36 - .end = DAVINCI_USB_OTG_BASE + 0x5ff, 37 - .flags = IORESOURCE_MEM, 38 - }, 39 - { 40 - .start = DAVINCI_INTC_IRQ(IRQ_USBINT), 41 - .flags = IORESOURCE_IRQ, 42 - .name = "mc" 43 - }, 44 - }; 45 - 46 - static u64 usb_dmamask = DMA_BIT_MASK(32); 47 - 48 - static struct platform_device usb_dev = { 49 - .name = "musb-davinci", 50 - .id = -1, 51 - .dev = { 52 - .platform_data = &usb_data, 53 - .dma_mask = &usb_dmamask, 54 - .coherent_dma_mask = DMA_BIT_MASK(32), 55 - }, 56 - .resource = usb_resources, 57 - .num_resources = ARRAY_SIZE(usb_resources), 58 - }; 59 - 60 - void __init davinci_setup_usb(unsigned mA, unsigned potpgt_ms) 61 - { 62 - usb_data.power = mA > 510 ? 255 : mA / 2; 63 - usb_data.potpgt = (potpgt_ms + 1) / 2; 64 - 65 - platform_device_register(&usb_dev); 66 - } 67 - 68 - #else 69 - 70 - void __init davinci_setup_usb(unsigned mA, unsigned potpgt_ms) 71 - { 72 - } 73 - 74 - #endif /* CONFIG_USB_MUSB_HDRC */