Esempio n. 1
0
void usbotg_uninit(struct fsl_usb2_platform_data *pdata)
{
	pr_debug("%s\n", __func__);

	mxc_otg_used--;
	if (!mxc_otg_used) {
		if (pdata->xcvr_ops && pdata->xcvr_ops->uninit)
			pdata->xcvr_ops->uninit(pdata->xcvr_ops);

		pdata->regs = NULL;

		if (machine_is_mx31_3ds()) {
			if (pdata->xcvr_ops && pdata->xcvr_ops->suspend)
				pdata->xcvr_ops->suspend(pdata->xcvr_ops);
			clk_disable(usb_clk);
		}
		msleep(1);
		UOG_PORTSC1 = UOG_PORTSC1 | PORTSC_PHCD;
		if (pdata->gpio_usb_inactive)
			pdata->gpio_usb_inactive();
		if (pdata->xcvr_type == PORTSC_PTS_SERIAL)
			clk_disable(usb_clk);
		clk_disable(usb_ahb_clk);
	}
}
Esempio n. 2
0
void usbotg_uninit(struct fsl_usb2_platform_data *pdata)
{
	pr_debug("%s\n", __func__);

	otg_used--;
	if (!otg_used) {
		struct clk *phy_clk;
		if (pdata->xcvr_ops && pdata->xcvr_ops->uninit)
			pdata->xcvr_ops->uninit(pdata->xcvr_ops);

		pdata->regs = NULL;

		if (machine_is_mx31_3ds()) {
			if (pdata->xcvr_ops && pdata->xcvr_ops->suspend)
				pdata->xcvr_ops->suspend(pdata->xcvr_ops);
			clk_disable(usb_clk);
		}
		msleep(1);
		UOG_PORTSC1 = UOG_PORTSC1 | PORTSC_PHCD;
		if (cpu_is_mx37()) {
			phy_clk = clk_get(NULL, "usb_phy_clk");
			clk_disable(phy_clk);
			clk_put(phy_clk);
			pdata->usb_clock_for_pm(0);
		}

		pdata->gpio_usb_inactive();
		if (pdata->xcvr_type == PORTSC_PTS_SERIAL)
			clk_disable(usb_clk);
		clk_disable(usb_ahb_clk);
	}
}
void usbotg_uninit(struct fsl_usb2_platform_data *pdata)
{
	pr_debug("%s\n", __func__);

	mxc_otg_used--;
	if (!mxc_otg_used) {
		if (pdata->xcvr_ops && pdata->xcvr_ops->uninit)
			pdata->xcvr_ops->uninit(pdata->xcvr_ops);

		pdata->regs = NULL;

		if (machine_is_mx31_3ds()) {
			if (pdata->xcvr_ops && pdata->xcvr_ops->suspend)
				pdata->xcvr_ops->suspend(pdata->xcvr_ops);
			clk_disable(usb_clk);
		}
		msleep(1);
		UOG_PORTSC1 = UOG_PORTSC1 | PORTSC_PHCD;
		if (pdata->gpio_usb_inactive)
			pdata->gpio_usb_inactive();
		if (pdata->xcvr_type == PORTSC_PTS_SERIAL)
			clk_disable(usb_clk);
		clk_disable(usb_ahb_clk);
	/* FIXME workaround for clock refcounf when load/unload usb module
	 * Need to fix it in future
	 */
	#ifdef CONFIG_USB_OTG
		clk_disable(usb_ahb_clk);
	#endif
	}
}
static int __init usbh2_init(void)
{
	struct platform_device *h2_pdev;

	pr_debug("%s: \n", __func__);

	if (machine_is_mx31_3ds()) {
		struct regulator *usbh2_regux;
		usbh2_config.xcvr_pwr =
			kmalloc(sizeof(struct fsl_xcvr_power), GFP_KERNEL);
		if (!(usbh2_config.xcvr_pwr))
			return -ENOMEM;

		usbh2_regux = regulator_get(NULL, "GPO1");
		usbh2_config.xcvr_pwr->regu1 = usbh2_regux;
		usbh2_regux = regulator_get(NULL, "GPO3");
		usbh2_config.xcvr_pwr->regu2 = usbh2_regux;
	}

	h2_pdev = host_pdev_register(usbh2_resources,
			ARRAY_SIZE(usbh2_resources), &usbh2_config);
#ifdef CONFIG_USB_EHCI_ARC_H2_WAKE_UP
	/* set host2 may and should wakeup */
	device_init_wakeup(&(h2_pdev->dev), 1);
#endif
	return 0;
}
static int __devinit imx_mc13783_probe(struct platform_device *pdev)
{
	int ret;

	imx_mc13783.dev = &pdev->dev;

	ret = snd_soc_register_card(&imx_mc13783);
	if (ret) {
		dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n",
			ret);
		return ret;
	}

	if (machine_is_mx31_3ds()) {
		imx_audmux_v2_configure_port(MX31_AUDMUX_PORT4_SSI_PINS_4,
			IMX_AUDMUX_V2_PTCR_SYN,
			IMX_AUDMUX_V2_PDCR_RXDSEL(MX31_AUDMUX_PORT1_SSI0) |
			IMX_AUDMUX_V2_PDCR_MODE(1) |
			IMX_AUDMUX_V2_PDCR_INMMASK(0xfc));
		imx_audmux_v2_configure_port(MX31_AUDMUX_PORT1_SSI0,
			IMX_AUDMUX_V2_PTCR_SYN |
			IMX_AUDMUX_V2_PTCR_TFSDIR |
			IMX_AUDMUX_V2_PTCR_TFSEL(MX31_AUDMUX_PORT4_SSI_PINS_4) |
			IMX_AUDMUX_V2_PTCR_TCLKDIR |
			IMX_AUDMUX_V2_PTCR_TCSEL(MX31_AUDMUX_PORT4_SSI_PINS_4) |
			IMX_AUDMUX_V2_PTCR_RFSDIR |
			IMX_AUDMUX_V2_PTCR_RFSEL(MX31_AUDMUX_PORT4_SSI_PINS_4) |
			IMX_AUDMUX_V2_PTCR_RCLKDIR |
			IMX_AUDMUX_V2_PTCR_RCSEL(MX31_AUDMUX_PORT4_SSI_PINS_4),
			IMX_AUDMUX_V2_PDCR_RXDSEL(MX31_AUDMUX_PORT4_SSI_PINS_4));
	} else if (machine_is_mx27_3ds()) {
		imx_audmux_v1_configure_port(MX27_AUDMUX_HPCR1_SSI0,
			IMX_AUDMUX_V1_PCR_SYN |
			IMX_AUDMUX_V1_PCR_TFSDIR |
			IMX_AUDMUX_V1_PCR_TCLKDIR |
			IMX_AUDMUX_V1_PCR_RFSDIR |
			IMX_AUDMUX_V1_PCR_RCLKDIR |
			IMX_AUDMUX_V1_PCR_TFCSEL(MX27_AUDMUX_HPCR3_SSI_PINS_4) |
			IMX_AUDMUX_V1_PCR_RFCSEL(MX27_AUDMUX_HPCR3_SSI_PINS_4) |
			IMX_AUDMUX_V1_PCR_RXDSEL(MX27_AUDMUX_HPCR3_SSI_PINS_4)
		);
		imx_audmux_v1_configure_port(MX27_AUDMUX_HPCR3_SSI_PINS_4,
			IMX_AUDMUX_V1_PCR_SYN |
			IMX_AUDMUX_V1_PCR_RXDSEL(MX27_AUDMUX_HPCR1_SSI0)
		);
	}

	return ret;
}
Esempio n. 6
0
static void mxc_init_audio(void)
{
	struct clk *pll_clk;
	pll_clk = clk_get(NULL, "usb_pll");
	mxc_audio_data.ssi_clk[0] = clk_get(NULL, "ssi_clk.0");
	clk_set_parent(mxc_audio_data.ssi_clk[0], pll_clk);
	clk_put(mxc_audio_data.ssi_clk[0]);
	if (machine_is_mx31_3ds()) {
		mxc_audio_data.ssi_num = 1;
	} else {
		mxc_audio_data.ssi_num = 2;
		mxc_audio_data.ssi_clk[1] = clk_get(NULL, "ssi_clk.1");
		clk_set_parent(mxc_audio_data.ssi_clk[1], pll_clk);
		clk_put(mxc_audio_data.ssi_clk[1]);
	}
	clk_put(pll_clk);
	mxc_audio_data.src_port = 0;
	platform_device_register(&mxc_alsa_device);
}
Esempio n. 7
0
int fsl_usb_xcvr_suspend(struct fsl_xcvr_ops *xcvr_ops)
{
	if (!machine_is_mx31_3ds())
		return -ECANCELED;

	if (xcvr_ops->xcvr_type == PORTSC_PTS_ULPI) {
		if (fsl_check_usbclk() != 0)
			return -EINVAL;
		clk_enable(usb_clk);

		otg_set_ulpi_xcvr();

		if (xcvr_ops->suspend)
			/* suspend transceiver */
			xcvr_ops->suspend(xcvr_ops);

		clk_disable(usb_clk);
	}
	return 0;
}
Esempio n. 8
0
static int __init usbh2_init(void)
{
	pr_debug("%s: \n", __func__);

	if (machine_is_mx31_3ds()) {
		struct regulator *usbh2_regux;
		usbh2_config.xcvr_pwr =
			kmalloc(sizeof(struct fsl_xcvr_power), GFP_KERNEL);
		if (!(usbh2_config.xcvr_pwr))
			return -ENOMEM;

		usbh2_regux = regulator_get(NULL, "GPO1");
		usbh2_config.xcvr_pwr->regu1 = usbh2_regux;
		usbh2_regux = regulator_get(NULL, "GPO3");
		usbh2_config.xcvr_pwr->regu2 = usbh2_regux;
	}

	host_pdev_register(usbh2_resources, ARRAY_SIZE(usbh2_resources),
			   &usbh2_config);
	return 0;
}
static void lcd_init_fb(struct fb_info *info)
{
	struct fb_var_screeninfo var;

	memset(&var, 0, sizeof(var));

	fb_videomode_to_var(&var, &video_modes[0]);

	if (machine_is_mx31_3ds()) {
		var.upper_margin = 0;
		var.left_margin = 0;
	}

	var.activate = FB_ACTIVATE_ALL;
	var.yres_virtual = var.yres * 2;

	acquire_console_sem();
	info->flags |= FBINFO_MISC_USEREVENT;
	fb_set_var(info, &var);
	info->flags &= ~FBINFO_MISC_USEREVENT;
	release_console_sem();
}
Esempio n. 10
0
void fsl_usb_host_uninit(struct fsl_usb2_platform_data *pdata)
{
	pr_debug("%s\n", __func__);

	if (pdata->xcvr_ops && pdata->xcvr_ops->uninit)
		pdata->xcvr_ops->uninit(pdata->xcvr_ops);

	pdata->regs = NULL;

	pdata->gpio_usb_inactive();
	if (pdata->xcvr_type == PORTSC_PTS_SERIAL)
		clk_disable(usb_clk);
	else if ((pdata->xcvr_type == PORTSC_PTS_ULPI)
		 && (machine_is_mx31_3ds())) {
		usbh2_put_xcvr_power(&(pdata->xcvr_pwr->usb_pdev->dev));
		kfree(pdata->xcvr_pwr);
	}

	if (cpu_is_mx51()) {
		usb_clk = clk_get(NULL, "usboh3_clk");
		clk_disable(usb_clk);
		clk_put(usb_clk);
	}
}
Esempio n. 11
0
int fsl_usb_host_init(struct platform_device *pdev)
{
	struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data;
	struct fsl_xcvr_ops *xops;

	pr_debug("%s: pdev=0x%p  pdata=0x%p\n", __func__, pdev, pdata);

	xops = fsl_usb_get_xcvr(pdata->transceiver);
	if (!xops) {
		printk(KERN_ERR "%s transceiver ops missing\n", pdata->name);
		return -EINVAL;
	}
	pdata->xcvr_ops = xops;
	pdata->xcvr_type = xops->xcvr_type;
	pdata->pdev = pdev;

	if (fsl_check_usbclk() != 0)
		return -EINVAL;

	/* set host2 usb phy usb3317 power supply for imx31 3 stack */
	if ((pdata->xcvr_type == PORTSC_PTS_ULPI) && (machine_is_mx31_3ds())) {
		pdata->xcvr_pwr =
		    kmalloc(sizeof(struct fsl_xcvr_power), GFP_KERNEL);
		if (!(pdata->xcvr_pwr))
			return -ENOMEM;

		pdata->xcvr_pwr->usb_pdev = pdev;
		usbh2_get_xcvr_power(&(pdev->dev));
	}

	pr_debug("%s: grab pins\n", __func__);
	if (pdata->gpio_usb_active())
		return -EINVAL;

	if (clk_enable(usb_clk)) {
		printk(KERN_ERR "clk_enable(usb_clk) failed\n");
		return -EINVAL;
	}

	if (cpu_is_mx51()) {
		usb_clk = clk_get(NULL, "usboh3_clk");
		clk_enable(usb_clk);
		clk_put(usb_clk);
	}

	if (xops->init)
		xops->init(xops);

	if (xops->xcvr_type == PORTSC_PTS_SERIAL) {
		if (machine_is_mx35_3ds())
			usbh2_set_serial_xcvr();
		else
			usbh1_set_serial_xcvr();
	} else if (xops->xcvr_type == PORTSC_PTS_ULPI) {
		if (cpu_is_mx51()) {
			usbh1_set_ulpi_xcvr();
			gpio_usbh1_setback_stp();
		} else
			usbh2_set_ulpi_xcvr();
	}

	pr_debug("%s: %s success\n", __func__, pdata->name);
	return 0;
}