static int __init pxa300_init(void) { if (cpu_is_pxa300() || cpu_is_pxa310()) { mfp_init_base(io_p2v(MFPR_BASE)); mfp_init_addr(pxa300_mfp_addr_map); clks_register(ARRAY_AND_SIZE(common_clkregs)); } if (cpu_is_pxa310()) { mfp_init_addr(pxa310_mfp_addr_map); clks_register(ARRAY_AND_SIZE(pxa310_clkregs)); } return 0; }
static int __init pxa300_init(void) { if (cpu_is_pxa300() || cpu_is_pxa310()) { pxa3xx_init_mfp(); pxa3xx_mfp_init_addr(pxa300_mfp_addr_map); clks_register(ARRAY_AND_SIZE(common_clks)); } if (cpu_is_pxa310()) { pxa3xx_mfp_init_addr(pxa310_mfp_addr_map); clks_register(ARRAY_AND_SIZE(pxa310_clks)); } return 0; }
static void cm_x300_u2d_exit(struct device *dev) { if (cpu_is_pxa310()) { clk_disable(pout_clk); clk_put(pout_clk); } }
static void __init zylonite_init_mmc(void) { pxa_set_mci_info(&zylonite_mci_platform_data); pxa3xx_set_mci2_info(&zylonite_mci2_platform_data); if (cpu_is_pxa310()) pxa3xx_set_mci3_info(&zylonite_mci3_platform_data); }
static inline void __init colibri_pxa310_init_ac97(void) { /* no AC97 codec on Colibri PXA300 */ if (!cpu_is_pxa310()) return; pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa310_ac97_pin_config)); pxa_set_ac97_info(NULL); }
void pxa3xx_u2d_stop_hc(struct usb_bus *host) { /* In case the PXA3xx ULPI isn't used, do nothing. */ if (!u2d) return; if (cpu_is_pxa310()) pxa310_stop_otg_hc(); clk_disable(u2d->clk); }
/* MFP */ static void __init cm_x300_init_mfp(void) { /* board-processor specific GPIO initialization */ pxa3xx_mfp_config(ARRAY_AND_SIZE(cm_x3xx_mfp_cfg)); if (system_rev < 130) pxa3xx_mfp_config(ARRAY_AND_SIZE(cm_x3xx_rev_lt130_mfp_cfg)); else pxa3xx_mfp_config(ARRAY_AND_SIZE(cm_x3xx_rev_ge130_mfp_cfg)); if (cpu_is_pxa310()) pxa3xx_mfp_config(ARRAY_AND_SIZE(cm_x310_mfp_cfg)); }
int pxa3xx_u2d_start_hc(struct usb_bus *host) { int err = 0; /* In case the PXA3xx ULPI isn't used, do nothing. */ if (!u2d) return 0; clk_enable(u2d->clk); if (cpu_is_pxa310()) { pxa310_u2d_setup_otg_hc(); err = pxa310_start_otg_hc(host); } return err; }
static void do_hw_reset(void) { if (cpu_is_pxa3xx()) { if (cpu_is_pxa310()) { /* Initialize the watchdog and let it fire */ OWER = OWER_WME; OSSR = OSSR_M3; OSMR3 = OSCR + 368640; /* ... in 100 ms */ } else { /* GPIO reset */ PSPR = 0x5c014000; PMCR = (PMCR & (PMCR_BIE | PMCR_TIE | PMCR_VIE)) | PMCR_SWGR; } } else { /* Initialize the watchdog and let it fire */ OWER = OWER_WME; OSSR = OSSR_M3; OSMR3 = OSCR + 368640; /* ... in 100 ms */ } }
static inline int cm_x300_u2d_init(struct device *dev) { int err = 0; if (cpu_is_pxa310()) { /* CLK_POUT is connected to the ULPI PHY */ pout_clk = clk_get(NULL, "CLK_POUT"); if (IS_ERR(pout_clk)) { err = PTR_ERR(pout_clk); pr_err("failed to get CLK_POUT: %d\n", err); return err; } clk_enable(pout_clk); err = cm_x300_ulpi_phy_reset(); if (err) { clk_disable(pout_clk); clk_put(pout_clk); } } return err; }
static int pxa3xx_u2d_remove(struct platform_device *pdev) { struct pxa3xx_u2d_platform_data *pdata = pdev->dev.platform_data; struct resource *r; if (cpu_is_pxa310()) { pxa310_stop_otg_hc(); pxa310_otg_exit(); } if (pdata->exit) pdata->exit(&pdev->dev); platform_set_drvdata(pdev, NULL); iounmap(u2d->mmio_base); r = platform_get_resource(pdev, IORESOURCE_MEM, 0); release_mem_region(r->start, resource_size(r)); clk_put(u2d->clk); kfree(u2d); return 0; }
static int pxa3xx_u2d_probe(struct platform_device *pdev) { struct pxa3xx_u2d_platform_data *pdata = pdev->dev.platform_data; struct resource *r; int err; u2d = kzalloc(sizeof(*u2d), GFP_KERNEL); if (!u2d) return -ENOMEM; u2d->clk = clk_get(&pdev->dev, NULL); if (IS_ERR(u2d->clk)) { dev_err(&pdev->dev, "failed to get u2d clock\n"); err = PTR_ERR(u2d->clk); goto err_free_mem; } r = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!r) { dev_err(&pdev->dev, "no IO memory resource defined\n"); err = -ENODEV; goto err_put_clk; } r = request_mem_region(r->start, resource_size(r), pdev->name); if (!r) { dev_err(&pdev->dev, "failed to request memory resource\n"); err = -EBUSY; goto err_put_clk; } u2d->mmio_base = ioremap(r->start, resource_size(r)); if (!u2d->mmio_base) { dev_err(&pdev->dev, "ioremap() failed\n"); err = -ENODEV; goto err_free_res; } if (pdata->init) { err = pdata->init(&pdev->dev); if (err) goto err_free_io; } /* Only PXA310 U2D has OTG functionality */ if (cpu_is_pxa310()) { err = pxa310_otg_init(pdata); if (err) goto err_free_plat; } platform_set_drvdata(pdev, &u2d); return 0; err_free_plat: if (pdata->exit) pdata->exit(&pdev->dev); err_free_io: iounmap(u2d->mmio_base); err_free_res: release_mem_region(r->start, resource_size(r)); err_put_clk: clk_put(u2d->clk); err_free_mem: kfree(u2d); return err; }