static __init void tnetv107x_evm_board_init(void) { davinci_cfg_reg_list(sdio1_pins); davinci_cfg_reg_list(uart1_pins); tnetv107x_devices_init(&evm_device_info); }
static __init void da850_vpif_init(void) { int ret; ret = da850_register_vpif(); if (ret) pr_warn("da850_evm_init: VPIF setup failed: %d\n", ret); ret = davinci_cfg_reg_list(da850_vpif_capture_pins); if (ret) pr_warn("da850_evm_init: VPIF capture mux setup failed: %d\n", ret); ret = da850_register_vpif_capture(&da850_vpif_capture_config); if (ret) pr_warn("da850_evm_init: VPIF capture setup failed: %d\n", ret); ret = davinci_cfg_reg_list(da850_vpif_display_pins); if (ret) pr_warn("da850_evm_init: VPIF display mux setup failed: %d\n", ret); ret = da850_register_vpif_display(&da850_vpif_display_config); if (ret) pr_warn("da850_evm_init: VPIF display setup failed: %d\n", ret); }
static int __init da850_evm_config_emac(void) { void __iomem *cfg_chip3_base; int ret; u32 val; struct davinci_soc_info *soc_info = &davinci_soc_info; u8 rmii_en = soc_info->emac_pdata->rmii_en; if (!machine_is_davinci_da850_evm()) return 0; cfg_chip3_base = DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP3_REG); val = __raw_readl(cfg_chip3_base); if (rmii_en) { val |= BIT(8); ret = davinci_cfg_reg_list(da850_rmii_pins); pr_info("EMAC: RMII PHY configured, MII PHY will not be" " functional\n"); } else { val &= ~BIT(8); ret = davinci_cfg_reg_list(da850_cpgmac_pins); pr_info("EMAC: MII PHY configured, RMII PHY will not be" " functional\n"); } if (ret) pr_warning("da850_evm_init: cpgmac/rmii mux setup failed: %d\n", ret); /* configure the CFGCHIP3 register for RMII or MII */ __raw_writel(val, cfg_chip3_base); ret = davinci_cfg_reg(DA850_GPIO2_6); if (ret) pr_warning("da850_evm_init:GPIO(2,6) mux setup " "failed\n"); ret = gpio_request(DA850_MII_MDIO_CLKEN_PIN, "mdio_clk_en"); if (ret) { pr_warning("Cannot open GPIO %d\n", DA850_MII_MDIO_CLKEN_PIN); return ret; } /* Enable/Disable MII MDIO clock */ gpio_direction_output(DA850_MII_MDIO_CLKEN_PIN, rmii_en); soc_info->emac_pdata->phy_mask = DA850_EVM_PHY_MASK; soc_info->emac_pdata->mdio_max_freq = DA850_EVM_MDIO_FREQUENCY; ret = da8xx_register_emac(); if (ret) pr_warning("da850_evm_init: emac registration failed: %d\n", ret); return 0; }
static __init void da830_evm_init(void) { struct davinci_soc_info *soc_info = &davinci_soc_info; int ret; ret = da830_register_edma(da830_edma_rsv); if (ret) pr_warning("da830_evm_init: edma registration failed: %d\n", ret); ret = davinci_cfg_reg_list(da830_i2c0_pins); if (ret) pr_warning("da830_evm_init: i2c0 mux setup failed: %d\n", ret); ret = da8xx_register_i2c(0, &da830_evm_i2c_0_pdata); if (ret) pr_warning("da830_evm_init: i2c0 registration failed: %d\n", ret); da830_evm_usb_init(); soc_info->emac_pdata->phy_mask = DA830_EVM_PHY_MASK; soc_info->emac_pdata->mdio_max_freq = DA830_EVM_MDIO_FREQUENCY; soc_info->emac_pdata->rmii_en = 1; ret = davinci_cfg_reg_list(da830_cpgmac_pins); if (ret) pr_warning("da830_evm_init: cpgmac mux setup failed: %d\n", ret); ret = da8xx_register_emac(); if (ret) pr_warning("da830_evm_init: emac registration failed: %d\n", ret); ret = da8xx_register_watchdog(); if (ret) pr_warning("da830_evm_init: watchdog registration failed: %d\n", ret); davinci_serial_init(&da830_evm_uart_config); i2c_register_board_info(1, da830_evm_i2c_devices, ARRAY_SIZE(da830_evm_i2c_devices)); ret = davinci_cfg_reg_list(da830_evm_mcasp1_pins); if (ret) pr_warning("da830_evm_init: mcasp1 mux setup failed: %d\n", ret); da8xx_register_mcasp(1, &da830_evm_snd_data); da830_evm_init_mmc(); ret = da8xx_register_rtc(); if (ret) pr_warning("da830_evm_init: rtc setup failed: %d\n", ret); }
static inline void da850_evm_setup_nor_nand(void) { int ret = 0; if (ui_card_detected && !HAS_MMC) { ret = davinci_cfg_reg_list(da850_evm_nand_pins); if (ret) pr_warning("da850_evm_init: nand mux setup failed: " "%d\n", ret); ret = davinci_cfg_reg(DA850_GPIO0_11); if (ret) pr_warning("da850_evm_init:GPIO(0,11) mux setup " "failed\n"); ret = gpio_request(DA850_SD_ENABLE_PIN, "mmc_sd_en"); if (ret) pr_warning("Cannot open GPIO %d\n", DA850_SD_ENABLE_PIN); /* Driver GP0[11] low for NOR to work */ gpio_direction_output(DA850_SD_ENABLE_PIN, 0); ret = davinci_cfg_reg_list(da850_evm_nor_pins); if (ret) pr_warning("da850_evm_init: nor mux setup failed: %d\n", ret); platform_add_devices(da850_evm_devices, ARRAY_SIZE(da850_evm_devices)); } else if (ui_card_detected && HAS_MMC) { /* * On Logic PD Rev.3 EVMs GP0[11] pin needs to be configured * for MMC and NOR to work. When GP0[11] is low, the SD0 * interface will not work, but NOR flash will. When GP0[11] * is high, SD0 will work but NOR flash will not. By default * we are assuming that GP0[11] pin is driven high, when UI * card is not connected. Hence we are not configuring the * GP0[11] pin when MMC/SD is enabled and UI card is not * connected. Not configuring the GPIO pin will enable the * bluetooth to work on AM18x as it requires the GP0[11] * pin for UART flow control. */ ret = davinci_cfg_reg(DA850_GPIO0_11); if (ret) pr_warning("da850_evm_init:GPIO(0,11) mux setup " "failed\n"); ret = gpio_request(DA850_SD_ENABLE_PIN, "mmc_sd_en"); if (ret) pr_warning("Cannot open GPIO %d\n", DA850_SD_ENABLE_PIN); /* Driver GP0[11] high for SD to work */ gpio_direction_output(DA850_SD_ENABLE_PIN, 1); } }
static __init void tnetv107x_evm_board_init(void) { davinci_cfg_reg_list(sdio1_pins); davinci_cfg_reg_list(uart1_pins); davinci_cfg_reg_list(ssp_pins); tnetv107x_devices_init(&evm_device_info); spi_register_board_info(spi_info, ARRAY_SIZE(spi_info)); }
static inline void da830_evm_init_mmc(void) { int ret; ret = davinci_cfg_reg_list(da830_evm_mmc_sd_pins); if (ret) { pr_warning("da830_evm_init: mmc/sd mux setup failed: %d\n", ret); return; } ret = gpio_request(DA830_MMCSD_WP_PIN, "MMC WP"); if (ret) { pr_warning("da830_evm_init: can not open GPIO %d\n", DA830_MMCSD_WP_PIN); return; } gpio_direction_input(DA830_MMCSD_WP_PIN); ret = gpio_request(DA830_MMCSD_CD_PIN, "MMC CD\n"); if (ret) { pr_warning("da830_evm_init: can not open GPIO %d\n", DA830_MMCSD_CD_PIN); return; } gpio_direction_input(DA830_MMCSD_CD_PIN); ret = da8xx_register_mmcsd0(&da830_evm_mmc_config); if (ret) { pr_warning("da830_evm_init: mmc/sd registration failed: %d\n", ret); gpio_free(DA830_MMCSD_WP_PIN); } }
static __init void omapl138_hawk_config_emac(void) { void __iomem *cfgchip3 = DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP3_REG); int ret; u32 val; struct davinci_soc_info *soc_info = &davinci_soc_info; val = __raw_readl(cfgchip3); val &= ~BIT(8); ret = davinci_cfg_reg_list(omapl138_hawk_mii_pins); if (ret) { pr_warning("%s: cpgmac/mii mux setup failed: %d\n", __func__, ret); return; } /* configure the CFGCHIP3 register for MII */ __raw_writel(val, cfgchip3); pr_info("EMAC: MII PHY configured\n"); soc_info->emac_pdata->phy_id = HAWKBOARD_PHY_ID; ret = da8xx_register_emac(); if (ret) pr_warning("%s: emac registration failed: %d\n", __func__, ret); }
void __init da8xx_board_usb_init(const short pins[], struct da8xx_ohci_root_hub *usb11_pdata) { int ret; struct gpio_based *gpio = (usb11_pdata->type == GPIO_BASED) ? &usb11_pdata->method.gpio_method : NULL; ret = davinci_cfg_reg_list(pins); if (ret) { pr_warning("%s: USB 1.1 PinMux setup failed: %d\n", __func__, ret); return; } if (usb11_pdata->type == GPIO_BASED) { ret = gpio_request_one(gpio->power_control_pin, GPIOF_OUT_INIT_LOW, "ON_BD_USB_DRV"); if (ret) { pr_err("%s: failed to request GPIO for USB 1.1 port " "power control: %d\n", __func__, ret); return; } ret = gpio_request_one(gpio->over_current_indicator, GPIOF_IN, "ON_BD_USB_OVC"); if (ret) { pr_err("%s: failed to request GPIO for USB 1.1 port " "over-current indicator: %d\n", __func__, ret); goto usb11_setup_oc_fail; } } usb11_pdata->set_power = da8xx_usb_set_power; usb11_pdata->get_power = da8xx_usb_get_power; usb11_pdata->get_oci = da8xx_usb_get_oci; usb11_pdata->ocic_notify = da8xx_usb_ocic_notify; /* TPS2087 switch @ 5V */ usb11_pdata->potpgt = (3 + 1) / 2; ret = da8xx_register_usb11(usb11_pdata); if (ret) { pr_warning("%s: USB 1.1 registration failed: %d\n", __func__, ret); goto usb11_setup_fail; } return; usb11_setup_fail: if (usb11_pdata->type == GPIO_BASED) gpio_free(gpio->over_current_indicator); usb11_setup_oc_fail: if (usb11_pdata->type == GPIO_BASED) gpio_free(gpio->power_control_pin); }
static inline void da850_evm_setup_nor_nand(void) { int ret = 0; if (!HAS_MMC) { ret = davinci_cfg_reg_list(da850_evm_nand_pins); if (ret) pr_warning("da850_evm_init: nand mux setup failed: " "%d\n", ret); ret = davinci_cfg_reg_list(da850_evm_nor_pins); if (ret) pr_warning("da850_evm_init: nor mux setup failed: %d\n", ret); da850_evm_init_nor(); platform_add_devices(da850_evm_devices, ARRAY_SIZE(da850_evm_devices)); } }
static __init void omapl138_hawk_usb_init(void) { int ret; u32 cfgchip2; ret = davinci_cfg_reg_list(da850_hawk_usb11_pins); if (ret) { pr_warning("%s: USB 1.1 PinMux setup failed: %d\n", __func__, ret); return; } /* Setup the Ref. clock frequency for the HAWK at 24 MHz. */ cfgchip2 = __raw_readl(DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP2_REG)); cfgchip2 &= ~CFGCHIP2_REFFREQ; cfgchip2 |= CFGCHIP2_REFFREQ_24MHZ; __raw_writel(cfgchip2, DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP2_REG)); ret = gpio_request_one(DA850_USB1_VBUS_PIN, GPIOF_DIR_OUT, "USB1 VBUS"); if (ret < 0) { pr_err("%s: failed to request GPIO for USB 1.1 port " "power control: %d\n", __func__, ret); return; } ret = gpio_request_one(DA850_USB1_OC_PIN, GPIOF_DIR_IN, "USB1 OC"); if (ret < 0) { pr_err("%s: failed to request GPIO for USB 1.1 port " "over-current indicator: %d\n", __func__, ret); goto usb11_setup_oc_fail; } ret = da8xx_register_usb11(&omapl138_hawk_usb11_pdata); if (ret) { pr_warning("%s: USB 1.1 registration failed: %d\n", __func__, ret); goto usb11_setup_fail; } return; usb11_setup_fail: gpio_free(DA850_USB1_OC_PIN); usb11_setup_oc_fail: gpio_free(DA850_USB1_VBUS_PIN); }
static inline void da830_evm_init_lcdc(int mux_mode) { int ret; ret = davinci_cfg_reg_list(da830_lcdcntl_pins); if (ret) pr_warning("da830_evm_init: lcdcntl mux setup failed: %d\n", ret); ret = da8xx_register_lcdc(&sharp_lcd035q3dg01_pdata); if (ret) pr_warning("da830_evm_init: lcd setup failed: %d\n", ret); gpio_direction_output(mux_mode, 0); }
static inline void da850_evm_setup_nor_nand(void) { int ret = 0; if (!HAS_MMC) { ret = davinci_cfg_reg_list(da850_evm_nand_pins); if (ret) pr_warn("%s: NAND mux setup failed: %d\n", __func__, ret); ret = davinci_cfg_reg_list(da850_evm_nor_pins); if (ret) pr_warn("%s: NOR mux setup failed: %d\n", __func__, ret); da850_evm_init_nor(); platform_add_devices(da850_evm_devices, ARRAY_SIZE(da850_evm_devices)); if (davinci_aemif_setup(&da850_evm_nandflash_device)) pr_warn("%s: Cannot configure AEMIF.\n", __func__); } }
static void __init mityomapl138_config_emac(void) { void __iomem *cfg_chip3_base; int ret; u32 val; struct davinci_soc_info *soc_info = &davinci_soc_info; soc_info->emac_pdata->rmii_en = 0; /* hardcoded for now */ cfg_chip3_base = DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP3_REG); val = __raw_readl(cfg_chip3_base); if (soc_info->emac_pdata->rmii_en) { val |= BIT(8); ret = davinci_cfg_reg_list(mityomap_rmii_pins); pr_info("RMII PHY configured\n"); } else { val &= ~BIT(8); ret = davinci_cfg_reg_list(mityomap_mii_pins); pr_info("MII PHY configured\n"); } if (ret) { pr_warning("mii/rmii mux setup failed: %d\n", ret); return; } /* configure the CFGCHIP3 register for RMII or MII */ __raw_writel(val, cfg_chip3_base); soc_info->emac_pdata->phy_id = MITYOMAPL138_PHY_ID; ret = da8xx_register_emac(); if (ret) pr_warning("emac registration failed: %d\n", ret); }
static __init int da850_wl12xx_init(void) { int ret; ret = davinci_cfg_reg_list(da850_wl12xx_pins); if (ret) { pr_err("wl12xx/mmc mux setup failed: %d\n", ret); goto exit; } ret = da850_register_mmcsd1(&da850_wl12xx_mmc_config); if (ret) { pr_err("wl12xx/mmc registration failed: %d\n", ret); goto exit; } ret = gpio_request_one(DA850_WLAN_EN, GPIOF_OUT_INIT_LOW, "wl12xx_en"); if (ret) { pr_err("Could not request wl12xx enable gpio: %d\n", ret); goto exit; } ret = gpio_request_one(DA850_WLAN_IRQ, GPIOF_IN, "wl12xx_irq"); if (ret) { pr_err("Could not request wl12xx irq gpio: %d\n", ret); goto free_wlan_en; } da850_wl12xx_wlan_data.irq = gpio_to_irq(DA850_WLAN_IRQ); ret = wl12xx_set_platform_data(&da850_wl12xx_wlan_data); if (ret) { pr_err("Could not set wl12xx data: %d\n", ret); goto free_wlan_irq; } return 0; free_wlan_irq: gpio_free(DA850_WLAN_IRQ); free_wlan_en: gpio_free(DA850_WLAN_EN); exit: return ret; }
static __init void omapl138_hawk_mmc_init(void) { int ret; ret = davinci_cfg_reg_list(hawk_mmcsd0_pins); if (ret) { pr_warning("%s: MMC/SD0 mux setup failed: %d\n", __func__, ret); return; } ret = gpio_request_one(DA850_HAWK_MMCSD_CD_PIN, GPIOF_DIR_IN, "MMC CD"); if (ret < 0) { pr_warning("%s: can not open GPIO %d\n", __func__, DA850_HAWK_MMCSD_CD_PIN); return; } ret = gpio_request_one(DA850_HAWK_MMCSD_WP_PIN, GPIOF_DIR_IN, "MMC WP"); if (ret < 0) { pr_warning("%s: can not open GPIO %d\n", __func__, DA850_HAWK_MMCSD_WP_PIN); goto mmc_setup_wp_fail; } ret = da8xx_register_mmcsd0(&da850_mmc_config); if (ret) { pr_warning("%s: MMC/SD0 registration failed: %d\n", __func__, ret); goto mmc_setup_mmcsd_fail; } return; mmc_setup_mmcsd_fail: gpio_free(DA850_HAWK_MMCSD_WP_PIN); mmc_setup_wp_fail: gpio_free(DA850_HAWK_MMCSD_CD_PIN); }
static inline void da830_evm_init_nand(int mux_mode) { int ret; if (HAS_MMC) { pr_warning("WARNING: both MMC/SD and NAND are " "enabled, but they share AEMIF pins.\n" "\tDisable MMC/SD for NAND support.\n"); return; } ret = davinci_cfg_reg_list(da830_evm_emif25_pins); if (ret) pr_warning("da830_evm_init: emif25 mux setup failed: %d\n", ret); ret = platform_device_register(&da830_evm_nand_device); if (ret) pr_warning("da830_evm_init: NAND device not registered.\n"); gpio_direction_output(mux_mode, 1); }
/* * does GPIO setup. * returns 0 on success, non-zero on failure. */ static int sound_init_gpio (void) { int ret = 0; int pin; #warning Move this to board-level init at some point (when d_pwm stuff goes). ret = davinci_cfg_reg_list (legoev3_sound_pins); if (ret) { pr_warning ("ev3dev_sound: legoev3_sound_pins setup failed: %d\n", ret); return ret; } for (pin = 0; pin < SOUND_PINS; pin++) { if (legoev3_sound_gpio[pin] >= 0) { ret = gpio_request (legoev3_sound_gpio[pin], "ev3dev_sound"); if (ret) { pr_warning ("ev3dev_sound: failed to claim gpio pin 0x%x, gpio_request returned %d\n", legoev3_sound_gpio[pin], ret); return ret; } gpio_direction_input (legoev3_sound_gpio[pin]); } } return 0; }
static __init void da830_evm_usb_init(void) { u32 cfgchip2; int ret; /* * Set up USB clock/mode in the CFGCHIP2 register. * FYI: CFGCHIP2 is 0x0000ef00 initially. */ cfgchip2 = __raw_readl(DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP2_REG)); /* USB2.0 PHY reference clock is 24 MHz */ cfgchip2 &= ~CFGCHIP2_REFFREQ; cfgchip2 |= CFGCHIP2_REFFREQ_24MHZ; /* * Select internal reference clock for USB 2.0 PHY * and use it as a clock source for USB 1.1 PHY * (this is the default setting anyway). */ cfgchip2 &= ~CFGCHIP2_USB1PHYCLKMUX; cfgchip2 |= CFGCHIP2_USB2PHYCLKMUX; /* * We have to override VBUS/ID signals when MUSB is configured into the * host-only mode -- ID pin will float if no cable is connected, so the * controller won't be able to drive VBUS thinking that it's a B-device. * Otherwise, we want to use the OTG mode and enable VBUS comparators. */ cfgchip2 &= ~CFGCHIP2_OTGMODE; #ifdef CONFIG_USB_MUSB_HOST cfgchip2 |= CFGCHIP2_FORCE_HOST; #else cfgchip2 |= CFGCHIP2_SESENDEN | CFGCHIP2_VBDTCTEN; #endif __raw_writel(cfgchip2, DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP2_REG)); /* USB_REFCLKIN is not used. */ ret = davinci_cfg_reg(DA830_USB0_DRVVBUS); if (ret) pr_warning("%s: USB 2.0 PinMux setup failed: %d\n", __func__, ret); else { /* * TPS2065 switch @ 5V supplies 1 A (sustains 1.5 A), * with the power on to power good time of 3 ms. */ ret = da8xx_register_usb20(1000, 3); if (ret) pr_warning("%s: USB 2.0 registration failed: %d\n", __func__, ret); } ret = davinci_cfg_reg_list(da830_evm_usb11_pins); if (ret) { pr_warning("%s: USB 1.1 PinMux setup failed: %d\n", __func__, ret); return; } ret = gpio_request(ON_BD_USB_DRV, "ON_BD_USB_DRV"); if (ret) { printk(KERN_ERR "%s: failed to request GPIO for USB 1.1 port " "power control: %d\n", __func__, ret); return; } gpio_direction_output(ON_BD_USB_DRV, 0); ret = gpio_request(ON_BD_USB_OVC, "ON_BD_USB_OVC"); if (ret) { printk(KERN_ERR "%s: failed to request GPIO for USB 1.1 port " "over-current indicator: %d\n", __func__, ret); return; } gpio_direction_input(ON_BD_USB_OVC); ret = da8xx_register_usb11(&da830_evm_usb11_pdata); if (ret) pr_warning("%s: USB 1.1 registration failed: %d\n", __func__, ret); }
static __init void da850_evm_init(void) { int ret; ret = da850_register_gpio(); if (ret) pr_warn("%s: GPIO init failed: %d\n", __func__, ret); ret = pmic_tps65070_init(); if (ret) pr_warn("%s: TPS65070 PMIC init failed: %d\n", __func__, ret); ret = da850_register_edma(da850_edma_rsv); if (ret) pr_warn("%s: EDMA registration failed: %d\n", __func__, ret); ret = davinci_cfg_reg_list(da850_i2c0_pins); if (ret) pr_warn("%s: I2C0 mux setup failed: %d\n", __func__, ret); ret = da8xx_register_i2c(0, &da850_evm_i2c_0_pdata); if (ret) pr_warn("%s: I2C0 registration failed: %d\n", __func__, ret); ret = da8xx_register_watchdog(); if (ret) pr_warn("%s: watchdog registration failed: %d\n", __func__, ret); if (HAS_MMC) { ret = davinci_cfg_reg_list(da850_evm_mmcsd0_pins); if (ret) pr_warn("%s: MMCSD0 mux setup failed: %d\n", __func__, ret); ret = gpio_request(DA850_MMCSD_CD_PIN, "MMC CD\n"); if (ret) pr_warn("%s: can not open GPIO %d\n", __func__, DA850_MMCSD_CD_PIN); gpio_direction_input(DA850_MMCSD_CD_PIN); ret = gpio_request(DA850_MMCSD_WP_PIN, "MMC WP\n"); if (ret) pr_warn("%s: can not open GPIO %d\n", __func__, DA850_MMCSD_WP_PIN); gpio_direction_input(DA850_MMCSD_WP_PIN); ret = da8xx_register_mmcsd0(&da850_mmc_config); if (ret) pr_warn("%s: MMCSD0 registration failed: %d\n", __func__, ret); ret = da850_wl12xx_init(); if (ret) pr_warn("%s: WL12xx initialization failed: %d\n", __func__, ret); } davinci_serial_init(da8xx_serial_device); i2c_register_board_info(1, da850_evm_i2c_devices, ARRAY_SIZE(da850_evm_i2c_devices)); /* * shut down uart 0 and 1; they are not used on the board and * accessing them causes endless "too much work in irq53" messages * with arago fs */ __raw_writel(0, IO_ADDRESS(DA8XX_UART1_BASE) + 0x30); __raw_writel(0, IO_ADDRESS(DA8XX_UART0_BASE) + 0x30); ret = davinci_cfg_reg_list(da850_evm_mcasp_pins); if (ret) pr_warn("%s: McASP mux setup failed: %d\n", __func__, ret); da850_evm_snd_data.sram_pool = sram_get_gen_pool(); da8xx_register_mcasp(0, &da850_evm_snd_data); ret = davinci_cfg_reg_list(da850_lcdcntl_pins); if (ret) pr_warn("%s: LCDC mux setup failed: %d\n", __func__, ret); ret = da8xx_register_uio_pruss(); if (ret) pr_warn("da850_evm_init: pruss initialization failed: %d\n", ret); /* Handle board specific muxing for LCD here */ ret = davinci_cfg_reg_list(da850_evm_lcdc_pins); if (ret) pr_warn("%s: EVM specific LCD mux setup failed: %d\n", __func__, ret); ret = da850_lcd_hw_init(); if (ret) pr_warn("%s: LCD initialization failed: %d\n", __func__, ret); sharp_lk043t1dg01_pdata.panel_power_ctrl = da850_panel_power_ctrl, ret = da8xx_register_lcdc(&sharp_lk043t1dg01_pdata); if (ret) pr_warn("%s: LCDC registration failed: %d\n", __func__, ret); ret = da8xx_register_rtc(); if (ret) pr_warn("%s: RTC setup failed: %d\n", __func__, ret); ret = da850_evm_init_cpufreq(); if (ret) pr_warn("%s: cpufreq registration failed: %d\n", __func__, ret); ret = da8xx_register_cpuidle(); if (ret) pr_warn("%s: cpuidle registration failed: %d\n", __func__, ret); ret = da850_register_pm(&da850_pm_device); if (ret) pr_warn("%s: suspend registration failed: %d\n", __func__, ret); da850_vpif_init(); ret = spi_register_board_info(da850evm_spi_info, ARRAY_SIZE(da850evm_spi_info)); if (ret) pr_warn("%s: spi info registration failed: %d\n", __func__, ret); ret = da8xx_register_spi_bus(1, ARRAY_SIZE(da850evm_spi_info)); if (ret) pr_warn("%s: SPI 1 registration failed: %d\n", __func__, ret); ret = da850_register_sata(DA850EVM_SATA_REFCLKPN_RATE); if (ret) pr_warn("%s: SATA registration failed: %d\n", __func__, ret); da850_evm_setup_mac_addr(); ret = da8xx_register_rproc(); if (ret) pr_warn("%s: dsp/rproc registration failed: %d\n", __func__, ret); }
static __init void da830_evm_init(void) { struct davinci_soc_info *soc_info = &davinci_soc_info; int ret; ret = da830_register_edma(da830_edma_rsv); if (ret) pr_warning("da830_evm_init: edma registration failed: %d\n", ret); ret = davinci_cfg_reg_list(da830_i2c0_pins); if (ret) pr_warning("da830_evm_init: i2c0 mux setup failed: %d\n", ret); ret = da8xx_register_i2c(0, &da830_evm_i2c_0_pdata); if (ret) pr_warning("da830_evm_init: i2c0 registration failed: %d\n", ret); da830_evm_usb_init(); soc_info->emac_pdata->rmii_en = 1; soc_info->emac_pdata->phy_id = DA830_EVM_PHY_ID; ret = davinci_cfg_reg_list(da830_cpgmac_pins); if (ret) pr_warning("da830_evm_init: cpgmac mux setup failed: %d\n", ret); ret = da8xx_register_emac(); if (ret) pr_warning("da830_evm_init: emac registration failed: %d\n", ret); ret = da8xx_register_watchdog(); if (ret) pr_warning("da830_evm_init: watchdog registration failed: %d\n", ret); davinci_serial_init(da8xx_serial_device); i2c_register_board_info(1, da830_evm_i2c_devices, ARRAY_SIZE(da830_evm_i2c_devices)); ret = davinci_cfg_reg_list(da830_evm_mcasp1_pins); if (ret) pr_warning("da830_evm_init: mcasp1 mux setup failed: %d\n", ret); da8xx_register_mcasp(1, &da830_evm_snd_data); da830_evm_init_mmc(); ret = da8xx_register_rtc(); if (ret) pr_warning("da830_evm_init: rtc setup failed: %d\n", ret); ret = spi_register_board_info(da830evm_spi_info, ARRAY_SIZE(da830evm_spi_info)); if (ret) pr_warn("%s: spi info registration failed: %d\n", __func__, ret); ret = da8xx_register_spi_bus(0, ARRAY_SIZE(da830evm_spi_info)); if (ret) pr_warning("da830_evm_init: spi 0 registration failed: %d\n", ret); }
static __init void da850_evm_init(void) { int ret; char mask = 0; struct davinci_soc_info *soc_info = &davinci_soc_info; u8 rmii_en = soc_info->emac_pdata->rmii_en; ret = da850_register_edma(da850_edma_rsv); if (ret) pr_warning("da850_evm_init: edma registration failed: %d\n", ret); ret = davinci_cfg_reg_list(da850_i2c0_pins); if (ret) pr_warning("da850_evm_init: i2c0 mux setup failed: %d\n", ret); platform_device_register(&da850_gpio_i2c); ret = da8xx_register_watchdog(); if (ret) pr_warning("da830_evm_init: watchdog registration failed: %d\n", ret); /* Support for UART 1 */ ret = davinci_cfg_reg_list(da850_uart1_pins); if (ret) pr_warning("da850_evm_init: UART 1 mux setup failed:" " %d\n", ret); ret = da850_register_sata(DA850EVM_SATA_REFCLKPN_RATE); if (ret) pr_warning("da850_evm_init: sata registration failed: %d\n", ret); if (HAS_MMC) { ret = davinci_cfg_reg_list(da850_mmcsd0_pins); if (ret) pr_warning("da850_evm_init: mmcsd0 mux setup failed:" " %d\n", ret); ret = gpio_request(DA850_MMCSD_CD_PIN, "MMC CD\n"); if (ret) pr_warning("da850_evm_init: can not open GPIO %d\n", DA850_MMCSD_CD_PIN); gpio_direction_input(DA850_MMCSD_CD_PIN); ret = gpio_request(DA850_MMCSD_WP_PIN, "MMC WP\n"); if (ret) pr_warning("da850_evm_init: can not open GPIO %d\n", DA850_MMCSD_WP_PIN); gpio_direction_input(DA850_MMCSD_WP_PIN); ret = da8xx_register_mmcsd0(&da850_mmc_config); if (ret) pr_warning("da850_evm_init: mmcsd0 registration failed:" " %d\n", ret); } davinci_serial_init(&da850_evm_uart_config); if (have_imager()) i2c_add_driver(&pca9543a_driver); i2c_register_board_info(1, da850_evm_i2c_devices, ARRAY_SIZE(da850_evm_i2c_devices)); /* * shut down uart 0 and 1; they are not used on the board and * accessing them causes endless "too much work in irq53" messages * with arago fs */ __raw_writel(0, IO_ADDRESS(DA8XX_UART0_BASE) + 0x30); if (HAS_MCBSP0) { if (HAS_EMAC) pr_warning("WARNING: both MCBSP0 and EMAC are " "enabled, but they share pins.\n" "\tDisable one of them.\n"); ret = davinci_cfg_reg_list(da850_mcbsp0_pins); if (ret) pr_warning("da850_evm_init: mcbsp0 mux setup failed:" " %d\n", ret); ret = da850_init_mcbsp(&da850_mcbsp0_config); if (ret) pr_warning("da850_evm_init: mcbsp0 registration" "failed: %d\n", ret); } if (HAS_MCBSP1) { ret = davinci_cfg_reg_list(da850_mcbsp1_pins); if (ret) pr_warning("da850_evm_init: mcbsp1 mux setup failed:" " %d\n", ret); ret = da850_init_mcbsp(&da850_mcbsp1_config); if (ret) pr_warning("da850_evm_init: mcbsp1 registration" " failed: %d\n", ret); } if (HAS_MCASP) { if ((HAS_MCBSP0 || HAS_MCBSP1)) pr_warning("WARNING: both McASP and McBSP are enabled, " "but they share pins.\n" "\tOnly McASP will work. If you want " "McBSP support, disable McASP.\n"); if (HAS_UART1_AFE) pr_warning("WARNING: both McASP and UART1_AFE are " "enabled, but they share pins.\n" "\tDisable one of them.\n"); ret = davinci_cfg_reg_list(da850_mcasp_pins); if (ret) pr_warning("da850_evm_init: mcasp mux setup failed:" "%d\n", ret); da8xx_register_mcasp(0, &da850_evm_snd_data); } ret = davinci_cfg_reg_list(da850_lcdcntl_pins); if (ret) pr_warning("da850_evm_init: lcdcntl mux setup failed: %d\n", ret); /* Handle board specific muxing for LCD here */ ret = davinci_cfg_reg_list(da850_evm_lcdc_pins); if (ret) pr_warning("da850_evm_init: evm specific lcd mux setup " "failed: %d\n", ret); ret = da850_lcd_hw_init(); if (ret) pr_warning("da850_evm_init: lcd initialization failed: %d\n", ret); sharp_lk043t1dg01_pdata.panel_power_ctrl = da850_panel_power_ctrl, ret = da8xx_register_lcdc(&sharp_lk043t1dg01_pdata); if (ret) pr_warning("da850_evm_init: lcdc registration failed: %d\n", ret); ret = da8xx_register_rtc(); if (ret) pr_warning("da850_evm_init: rtc setup failed: %d\n", ret); ret = da850_evm_init_cpufreq(); if (ret) pr_warning("da850_evm_init: cpufreq registration failed: %d\n", ret); ret = da8xx_register_cpuidle(); if (ret) pr_warning("da850_evm_init: cpuidle registration failed: %d\n", ret); ret = da850_register_pm(&da850_pm_device); if (ret) pr_warning("da850_evm_init: suspend registration failed: %d\n", ret); if (system_rev & 0x100) { ((struct flash_platform_data *)da850evm_spi_info[0] \ .platform_data)->type = "w25x64"; } else { ((struct flash_platform_data *)da850evm_spi_info[0] \ .platform_data)->type = "m25p64"; } da850evm_init_spi1(da850evm_spi_info, ARRAY_SIZE(da850evm_spi_info)); if (HAS_VPIF_DISPLAY || HAS_VPIF_CAPTURE) { ret = da850_register_vpif(); if (ret) pr_warning("da850_evm_init: VPIF registration failed: " "%d\n", ret); } if (!HAS_RMII && HAS_VPIF_CAPTURE) { ret = davinci_cfg_reg_list(da850_vpif_capture_pins); if (ret) pr_warning("da850_evm_init: vpif capture mux failed: " "%d\n", ret); ret = da850_register_vpif_capture(&da850_vpif_capture_config); if (ret) pr_warning("da850_evm_init: VPIF registration failed: " "%d\n", ret); } if (!HAS_GLCD && HAS_VPIF_DISPLAY) { ret = davinci_cfg_reg_list(da850_vpif_display_pins); if (ret) pr_warning("da850_evm_init: vpif capture mux failed: " "%d\n", ret); ret = da850_register_vpif_display(&da850_vpif_display_config); if (ret) pr_warning("da850_evm_init: VPIF registration failed: " "%d\n", ret); } if (rmii_en) { ret = davinci_cfg_reg_list(da850_ehrpwm0_pins); if (ret) pr_warning("da850_evm_init: ehrpwm0 mux setup failed:" "%d\n", ret); else mask = BIT(0) | BIT(1); } else { pr_warning("da850_evm_init: eHRPWM module 0 cannot be used" " since it is being used by MII interface\n"); mask = 0; } if (!HAS_LCD) { ret = davinci_cfg_reg_list(da850_ehrpwm1_pins); if (ret) pr_warning("da850_evm_init: eHRPWM module1 output A mux" " setup failed %d\n", ret); else mask = mask | BIT(2); } else { pr_warning("da850_evm_init: eHRPWM module1 outputA cannot be" " used since it is being used by LCD\n"); } if (!HAS_SPI) { ret = davinci_cfg_reg(DA850_EHRPWM1_B); if (ret) pr_warning("da850_evm_init: eHRPWM module1 outputB mux" " setup failed %d\n", ret); else mask = mask | BIT(3); } else { pr_warning("da850_evm_init: eHRPWM module1 outputB cannot be" " used since it is being used by spi1\n"); } da850_register_ehrpwm(mask); ret = platform_device_register(&da850evm_backlight); if (ret) pr_warning("da850_evm_init: backlight device registration" " failed: %d\n", ret); ret = davinci_cfg_reg(DA850_ECAP2_APWM2); if (ret) pr_warning("da850_evm_init:ecap mux failed: %d\n", ret); ret = da850_register_ecap(2); if (ret) pr_warning("da850_evm_init: eCAP registration failed: %d\n", ret); /* initilaize usb module */ da850_evm_usb_init(); }
/** * da850_enable_pca9543a() - Enable/Disable I2C switch PCA9543A for sensor * @en: enable/disable flag */ static int da850_enable_pca9543a(int en) { static char val = 1; int status = 1; struct i2c_msg msg = { .flags = 0, .len = 1, .buf = &val, }; pr_info("da850evm_enable_pca9543a\n"); if (!en) val = 0; if (!pca9543a) return -ENXIO; msg.addr = pca9543a->addr; /* turn i2c switch, pca9543a, on/off */ status = i2c_transfer(pca9543a->adapter, &msg, 1); if (status == 1) status = 0; return status; } static const short da850_evm_mii_pins[] = { DA850_MII_TXEN, DA850_MII_TXCLK, DA850_MII_COL, DA850_MII_TXD_3, DA850_MII_TXD_2, DA850_MII_TXD_1, DA850_MII_TXD_0, DA850_MII_RXER, DA850_MII_CRS, DA850_MII_RXCLK, DA850_MII_RXDV, DA850_MII_RXD_3, DA850_MII_RXD_2, DA850_MII_RXD_1, DA850_MII_RXD_0, DA850_MDIO_CLK, DA850_MDIO_D, -1 }; static const short da850_evm_rmii_pins[] = { DA850_RMII_TXD_0, DA850_RMII_TXD_1, DA850_RMII_TXEN, DA850_RMII_CRS_DV, DA850_RMII_RXD_0, DA850_RMII_RXD_1, DA850_RMII_RXER, DA850_RMII_MHZ_50_CLK, DA850_MDIO_CLK, DA850_MDIO_D, -1 }; static int __init da850_evm_config_emac(void) { void __iomem *cfg_chip3_base; int ret; u32 val; struct davinci_soc_info *soc_info = &davinci_soc_info; u8 rmii_en = soc_info->emac_pdata->rmii_en; if (!machine_is_davinci_da850_evm()) return 0; cfg_chip3_base = DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP3_REG); val = __raw_readl(cfg_chip3_base); if (rmii_en) { val |= BIT(8); ret = davinci_cfg_reg_list(da850_evm_rmii_pins); pr_info("EMAC: RMII PHY configured, MII PHY will not be" " functional\n"); } else { val &= ~BIT(8); ret = davinci_cfg_reg_list(da850_evm_mii_pins); pr_info("EMAC: MII PHY configured, RMII PHY will not be" " functional\n"); } if (ret) pr_warning("da850_evm_init: cpgmac/rmii mux setup failed: %d\n", ret); /* configure the CFGCHIP3 register for RMII or MII */ __raw_writel(val, cfg_chip3_base); ret = davinci_cfg_reg(DA850_GPIO2_6); if (ret) pr_warning("da850_evm_init:GPIO(2,6) mux setup " "failed\n"); ret = gpio_request(DA850_MII_MDIO_CLKEN_PIN, "mdio_clk_en"); if (ret) { pr_warning("Cannot open GPIO %d\n", DA850_MII_MDIO_CLKEN_PIN); return ret; } /* Enable/Disable MII MDIO clock */ gpio_direction_output(DA850_MII_MDIO_CLKEN_PIN, rmii_en); soc_info->emac_pdata->phy_id = DA850_EVM_PHY_ID; ret = da8xx_register_emac(); if (ret) pr_warning("da850_evm_init: emac registration failed: %d\n", ret); return 0; }
static __init void da850_evm_init(void) { int ret; ret = pmic_tps65070_init(); if (ret) pr_warning("da850_evm_init: TPS65070 PMIC init failed: %d\n", ret); ret = da850_register_edma(da850_edma_rsv); if (ret) pr_warning("da850_evm_init: edma registration failed: %d\n", ret); ret = davinci_cfg_reg_list(da850_i2c0_pins); if (ret) pr_warning("da850_evm_init: i2c0 mux setup failed: %d\n", ret); ret = da8xx_register_i2c(0, &da850_evm_i2c_0_pdata); if (ret) pr_warning("da850_evm_init: i2c0 registration failed: %d\n", ret); ret = da8xx_register_watchdog(); if (ret) pr_warning("da830_evm_init: watchdog registration failed: %d\n", ret); if (HAS_MMC) { ret = davinci_cfg_reg_list(da850_mmcsd0_pins); if (ret) pr_warning("da850_evm_init: mmcsd0 mux setup failed:" " %d\n", ret); ret = gpio_request(DA850_MMCSD_CD_PIN, "MMC CD\n"); if (ret) pr_warning("da850_evm_init: can not open GPIO %d\n", DA850_MMCSD_CD_PIN); gpio_direction_input(DA850_MMCSD_CD_PIN); ret = gpio_request(DA850_MMCSD_WP_PIN, "MMC WP\n"); if (ret) pr_warning("da850_evm_init: can not open GPIO %d\n", DA850_MMCSD_WP_PIN); gpio_direction_input(DA850_MMCSD_WP_PIN); ret = da8xx_register_mmcsd0(&da850_mmc_config); if (ret) pr_warning("da850_evm_init: mmcsd0 registration failed:" " %d\n", ret); } davinci_serial_init(&da850_evm_uart_config); i2c_register_board_info(1, da850_evm_i2c_devices, ARRAY_SIZE(da850_evm_i2c_devices)); /* * shut down uart 0 and 1; they are not used on the board and * accessing them causes endless "too much work in irq53" messages * with arago fs */ __raw_writel(0, IO_ADDRESS(DA8XX_UART1_BASE) + 0x30); __raw_writel(0, IO_ADDRESS(DA8XX_UART0_BASE) + 0x30); ret = davinci_cfg_reg_list(da850_mcasp_pins); if (ret) pr_warning("da850_evm_init: mcasp mux setup failed: %d\n", ret); da8xx_register_mcasp(0, &da850_evm_snd_data); ret = davinci_cfg_reg_list(da850_lcdcntl_pins); if (ret) pr_warning("da850_evm_init: lcdcntl mux setup failed: %d\n", ret); /* Handle board specific muxing for LCD here */ ret = davinci_cfg_reg_list(da850_evm_lcdc_pins); if (ret) pr_warning("da850_evm_init: evm specific lcd mux setup " "failed: %d\n", ret); ret = da850_lcd_hw_init(); if (ret) pr_warning("da850_evm_init: lcd initialization failed: %d\n", ret); sharp_lk043t1dg01_pdata.panel_power_ctrl = da850_panel_power_ctrl, ret = da8xx_register_lcdc(&sharp_lk043t1dg01_pdata); if (ret) pr_warning("da850_evm_init: lcdc registration failed: %d\n", ret); ret = da8xx_register_rtc(); if (ret) pr_warning("da850_evm_init: rtc setup failed: %d\n", ret); ret = da850_register_cpufreq(); if (ret) pr_warning("da850_evm_init: cpufreq registration failed: %d\n", ret); ret = da8xx_register_cpuidle(); if (ret) pr_warning("da850_evm_init: cpuidle registration failed: %d\n", ret); ret = da850_register_pm(&da850_pm_device); if (ret) pr_warning("da850_evm_init: suspend registration failed: %d\n", ret); }