static void tegra_set_dap_connection(u8 value)
{
	int reg_val;

	pr_info("Board N1 : %s : %d\n", __func__, value);

	switch (value) {
	case dap_connection_codec_slave: /* pcm_slave */
		das_writel(DAP_CTRL_SEL_DAP3,
			APB_MISC_DAS_DAP_CTRL_SEL_1);
		das_writel((DAP_MS_SEL_MASTER | DAP_CTRL_SEL_DAP2),
			APB_MISC_DAS_DAP_CTRL_SEL_2);
		break;
	case dap_connection_codec_master: /* pcm_master */
		das_writel(DAP_MS_SEL_MASTER |
			DAP_CTRL_SEL_DAP3, APB_MISC_DAS_DAP_CTRL_SEL_1);
		das_writel((DAP_CTRL_SEL_DAP2),
			APB_MISC_DAS_DAP_CTRL_SEL_2);
		break;
	case dap_connection_bt_call:
		/* DAP1 */
		reg_val = das_readl(APB_MISC_DAS_DAP_CTRL_SEL_0);
		reg_val &= ~(DAP_MS_SEL_DEFAULT_MASK
			<< DAP_MS_SEL_SHIFT);
		reg_val |= (1 << DAP_MS_SEL_SHIFT); /* DAP1 master */
		reg_val &= ~(DAP_CTRL_SEL_DEFAULT_MASK
			<< DAP_CTRL_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAC1
			<< DAP_CTRL_SEL_SHIFT); /* DAP1<-DAC1 */
		das_writel(reg_val, APB_MISC_DAS_DAP_CTRL_SEL_0);

		/* DAP2 */
		reg_val = das_readl(APB_MISC_DAS_DAP_CTRL_SEL_1);
		reg_val &= ~(DAP_MS_SEL_DEFAULT_MASK
			<< DAP_MS_SEL_SHIFT);
		reg_val |= (0 << DAP_MS_SEL_SHIFT); /* DAP2 slave */
		reg_val &= ~(DAP_CTRL_SEL_DEFAULT_MASK
			<< DAP_CTRL_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAP3
			<< DAP_CTRL_SEL_SHIFT); /*DAP2<-DAP3 */
		das_writel(reg_val, APB_MISC_DAS_DAP_CTRL_SEL_1);

		/* DAP3 */
		reg_val = das_readl(APB_MISC_DAS_DAP_CTRL_SEL_2);
		reg_val &= ~(DAP_MS_SEL_DEFAULT_MASK
			<< DAP_MS_SEL_SHIFT);
		reg_val |= (1 << DAP_MS_SEL_SHIFT); /* DAP3 master */
		reg_val &= ~(DAP_CTRL_SEL_DEFAULT_MASK
			<< DAP_CTRL_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAP4
			<< DAP_CTRL_SEL_SHIFT); /* DAP3<-DAP4 */
		das_writel(reg_val, APB_MISC_DAS_DAP_CTRL_SEL_2);

		/* DAP4 */
		reg_val = das_readl(APB_MISC_DAS_DAP_CTRL_SEL_3);
		reg_val &= ~(DAP_MS_SEL_DEFAULT_MASK
			<< DAP_MS_SEL_SHIFT);
		reg_val |= (0 << DAP_MS_SEL_SHIFT); /* DAP4 slave */
		reg_val &= ~(DAP_CTRL_SEL_DEFAULT_MASK
			<< DAP_CTRL_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAP2
			<< DAP_CTRL_SEL_SHIFT); /* DAP4<-DAP2 */
		das_writel(reg_val, APB_MISC_DAS_DAP_CTRL_SEL_3);

		/* DAC1 */
		reg_val =
			das_readl(APB_MISC_DAS_DAC_INPUT_DATA_CLK_SEL_0);
		reg_val &= ~(DAC_SDATA2_SEL_DEFAULT_MASK
			<< DAC_SDATA2_SEL_SHIFT);
		reg_val |= ((DAP_CTRL_SEL_DAP1 - DAP_CTRL_SEL_DAP1)
			<< DAC_SDATA2_SEL_SHIFT); /* DAC1 <- DAP1 */
		reg_val &= ~(DAC_SDATA1_SEL_DEFAULT_MASK
			<< DAC_SDATA1_SEL_SHIFT);
		reg_val |= ((DAP_CTRL_SEL_DAP1 - DAP_CTRL_SEL_DAP1)
			<< DAC_SDATA1_SEL_SHIFT); /* DAC1 <- DAP1 */
		reg_val &= ~(DAC_CLK_SEL_DEFAULT_MASK
			<< DAC_CLK_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAP1
			<< DAC_CLK_SEL_SHIFT); /*  DAC1 <- DAP1 */
		das_writel(reg_val,
			APB_MISC_DAS_DAC_INPUT_DATA_CLK_SEL_0);

		break;
	case dap_connection_bt_voip:
		/* DAP1 */
		reg_val = das_readl(APB_MISC_DAS_DAP_CTRL_SEL_0);
		reg_val &= ~(DAP_MS_SEL_DEFAULT_MASK
			<< DAP_MS_SEL_SHIFT);
		reg_val |= (1 << DAP_MS_SEL_SHIFT); /* DAP1 master */
		reg_val &= ~(DAP_CTRL_SEL_DEFAULT_MASK
			<< DAP_CTRL_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAC1
			<< DAP_CTRL_SEL_SHIFT); /* DAP1<-DAC1 */
		das_writel(reg_val, APB_MISC_DAS_DAP_CTRL_SEL_0);

		/* DAP2 */
		reg_val = das_readl(APB_MISC_DAS_DAP_CTRL_SEL_1);
		reg_val &= ~(DAP_MS_SEL_DEFAULT_MASK
			<< DAP_MS_SEL_SHIFT);
		reg_val |= (1 << DAP_MS_SEL_SHIFT); /* DAP2 slave */
		reg_val &= ~(DAP_CTRL_SEL_DEFAULT_MASK
			<< DAP_CTRL_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAP4
			<< DAP_CTRL_SEL_SHIFT); /* DAP2<-DAP3 */
		das_writel(reg_val, APB_MISC_DAS_DAP_CTRL_SEL_1);

		/* DAP4 */
		reg_val = das_readl(APB_MISC_DAS_DAP_CTRL_SEL_3);
		reg_val &= ~(DAP_MS_SEL_DEFAULT_MASK
			<< DAP_MS_SEL_SHIFT);
		reg_val |= (0 << DAP_MS_SEL_SHIFT); /* DAP4 slave */
		reg_val &= ~(DAP_CTRL_SEL_DEFAULT_MASK
			<< DAP_CTRL_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAP2
			<< DAP_CTRL_SEL_SHIFT); /* DAP4<-DAP2 */
		das_writel(reg_val, APB_MISC_DAS_DAP_CTRL_SEL_3);

		/* DAC1 */
		reg_val = das_readl(
			APB_MISC_DAS_DAC_INPUT_DATA_CLK_SEL_0);
		reg_val &= ~(DAC_SDATA2_SEL_DEFAULT_MASK
			<< DAC_SDATA2_SEL_SHIFT);
		reg_val |= ((DAP_CTRL_SEL_DAP1 - DAP_CTRL_SEL_DAP1)
			<< DAC_SDATA2_SEL_SHIFT); /* DAC1 <- DAP1 */
		reg_val &= ~(DAC_SDATA1_SEL_DEFAULT_MASK
			<< DAC_SDATA1_SEL_SHIFT);
		reg_val |= ((DAP_CTRL_SEL_DAP1 - DAP_CTRL_SEL_DAP1)
			<< DAC_SDATA1_SEL_SHIFT); /* DAC1 <- DAP1 */
		reg_val &= ~(DAC_CLK_SEL_DEFAULT_MASK
			<< DAC_CLK_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAP1
			<< DAC_CLK_SEL_SHIFT); /* DAC1 <- DAP1 */
		das_writel(reg_val, APB_MISC_DAS_DAC_INPUT_DATA_CLK_SEL_0);
		break;
	case dap_connection_bt_call_nomix:
		das_writel(DAP_CTRL_SEL_DAP3,
			APB_MISC_DAS_DAP_CTRL_SEL_1);
		das_writel(DAP_CTRL_SEL_DAP3,
			APB_MISC_DAS_DAP_CTRL_SEL_3);
		das_writel((DAP_MS_SEL_MASTER |
			DAP_CTRL_SEL_DAP2 | DAP_CTRL_SEL_DAP4),
			APB_MISC_DAS_DAP_CTRL_SEL_2);
		break;
	default:
		pr_err("Board N1 : %s : %d is not available\n",
					__func__, value);
		break;
	}
}
static void tegra_set_dap_connection(bool on)
{
	int reg_val;

	pr_info("Board P4 : %s : %d\n", __func__, on);
	if(on) {
#if 0
		das_writel(DAP_CTRL_SEL_DAP3, APB_MISC_DAS_DAP_CTRL_SEL_1);
		das_writel(DAP_CTRL_SEL_DAP3, APB_MISC_DAS_DAP_CTRL_SEL_3);
		das_writel((DAP_MS_SEL_MASTER /*| DAP_CTRL_SEL_DAP2*/ | DAP_CTRL_SEL_DAP4),
			APB_MISC_DAS_DAP_CTRL_SEL_2);
#else

		//DAP1
		reg_val = das_readl(APB_MISC_DAS_DAP_CTRL_SEL_0);

		reg_val &= ~(DAP_MS_SEL_DEFAULT_MASK << DAP_MS_SEL_SHIFT);
		reg_val |= (1 << DAP_MS_SEL_SHIFT); //DAP1 master

		reg_val &= ~(DAP_CTRL_SEL_DEFAULT_MASK << DAP_CTRL_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAC1 << DAP_CTRL_SEL_SHIFT); //DAP1<-DAC1

		das_writel(reg_val, APB_MISC_DAS_DAP_CTRL_SEL_0);

		//DAP2
		reg_val = das_readl(APB_MISC_DAS_DAP_CTRL_SEL_1);

		reg_val &= ~(DAP_MS_SEL_DEFAULT_MASK << DAP_MS_SEL_SHIFT);
		reg_val |= (1 << DAP_MS_SEL_SHIFT);//DAP2 master

		reg_val &= ~(DAP_CTRL_SEL_DEFAULT_MASK << DAP_CTRL_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAP4 << DAP_CTRL_SEL_SHIFT);//DAP2<-DAP4

		das_writel(reg_val, APB_MISC_DAS_DAP_CTRL_SEL_1);

		//DAP3
		reg_val = das_readl(APB_MISC_DAS_DAP_CTRL_SEL_2);

		reg_val &= ~(DAP_MS_SEL_DEFAULT_MASK << DAP_MS_SEL_SHIFT);
		reg_val |= (1 << DAP_MS_SEL_SHIFT);//DAP3 master

		reg_val &= ~(DAP_CTRL_SEL_DEFAULT_MASK << DAP_CTRL_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAP4 << DAP_CTRL_SEL_SHIFT);//DAP3<-DAP4

		das_writel(reg_val, APB_MISC_DAS_DAP_CTRL_SEL_2);

		//DAP4
		reg_val = das_readl(APB_MISC_DAS_DAP_CTRL_SEL_3);

		reg_val &= ~(DAP_MS_SEL_DEFAULT_MASK << DAP_MS_SEL_SHIFT);
		reg_val |= (0 << DAP_MS_SEL_SHIFT);//DAP4 slave

		reg_val &= ~(DAP_CTRL_SEL_DEFAULT_MASK << DAP_CTRL_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAP2 << DAP_CTRL_SEL_SHIFT);//DAP4<-DAP2

		das_writel(reg_val, APB_MISC_DAS_DAP_CTRL_SEL_3);

		//DAC1
		reg_val = das_readl(APB_MISC_DAS_DAC_INPUT_DATA_CLK_SEL_0);

		reg_val &= ~(DAC_SDATA2_SEL_DEFAULT_MASK << DAC_SDATA2_SEL_SHIFT);
		reg_val |= ((DAP_CTRL_SEL_DAP1 - DAP_CTRL_SEL_DAP1) << DAC_SDATA2_SEL_SHIFT);//DAC1 <- DAP1

		reg_val &= ~(DAC_SDATA1_SEL_DEFAULT_MASK << DAC_SDATA1_SEL_SHIFT);
		reg_val |= ((DAP_CTRL_SEL_DAP1 - DAP_CTRL_SEL_DAP1) << DAC_SDATA1_SEL_SHIFT);//DAC1 <- DAP1

		reg_val &= ~(DAC_CLK_SEL_DEFAULT_MASK << DAC_CLK_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAP1 << DAC_CLK_SEL_SHIFT);// DAC1 <- DAP1

		das_writel(reg_val, APB_MISC_DAS_DAC_INPUT_DATA_CLK_SEL_0);
#endif
	} else {
		das_writel(DAP_CTRL_SEL_DAP3, APB_MISC_DAS_DAP_CTRL_SEL_1);
		das_writel((DAP_MS_SEL_MASTER | DAP_CTRL_SEL_DAP2),
			APB_MISC_DAS_DAP_CTRL_SEL_2);
	}
}
Ejemplo n.º 3
0
static void tegra_set_dap_connection(bool on)
{
	int reg_val;

	pr_info("Board P4 : %s : %d\n", __func__, on);
	if (on) {
		/* DAP1 */
		reg_val = das_readl(APB_MISC_DAS_DAP_CTRL_SEL_0);

		reg_val &= ~(DAP_MS_SEL_DEFAULT_MASK << DAP_MS_SEL_SHIFT);
		reg_val |= (1 << DAP_MS_SEL_SHIFT);

		reg_val &= ~(DAP_CTRL_SEL_DEFAULT_MASK << DAP_CTRL_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAC1 << DAP_CTRL_SEL_SHIFT);

		das_writel(reg_val, APB_MISC_DAS_DAP_CTRL_SEL_0);

		/* DAP2 */
		reg_val = das_readl(APB_MISC_DAS_DAP_CTRL_SEL_1);

		reg_val &= ~(DAP_MS_SEL_DEFAULT_MASK << DAP_MS_SEL_SHIFT);
		reg_val |= (1 << DAP_MS_SEL_SHIFT);

		reg_val &= ~(DAP_CTRL_SEL_DEFAULT_MASK << DAP_CTRL_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAP4 << DAP_CTRL_SEL_SHIFT);

		das_writel(reg_val, APB_MISC_DAS_DAP_CTRL_SEL_1);

		/* DAP3 */
		reg_val = das_readl(APB_MISC_DAS_DAP_CTRL_SEL_2);

		reg_val &= ~(DAP_MS_SEL_DEFAULT_MASK << DAP_MS_SEL_SHIFT);
		reg_val |= (1 << DAP_MS_SEL_SHIFT);

		reg_val &= ~(DAP_CTRL_SEL_DEFAULT_MASK << DAP_CTRL_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAP4 << DAP_CTRL_SEL_SHIFT);

		das_writel(reg_val, APB_MISC_DAS_DAP_CTRL_SEL_2);

		/* DAP4 */
		reg_val = das_readl(APB_MISC_DAS_DAP_CTRL_SEL_3);

		reg_val &= ~(DAP_MS_SEL_DEFAULT_MASK << DAP_MS_SEL_SHIFT);
		reg_val |= (0 << DAP_MS_SEL_SHIFT);

		reg_val &= ~(DAP_CTRL_SEL_DEFAULT_MASK << DAP_CTRL_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAP2 << DAP_CTRL_SEL_SHIFT);

		das_writel(reg_val, APB_MISC_DAS_DAP_CTRL_SEL_3);

		/* DAC1 */
		reg_val = das_readl(APB_MISC_DAS_DAC_INPUT_DATA_CLK_SEL_0);

		reg_val &= ~(DAC_SDATA2_SEL_DEFAULT_MASK
			<< DAC_SDATA2_SEL_SHIFT);
		reg_val |= ((DAP_CTRL_SEL_DAP1 - DAP_CTRL_SEL_DAP1)
			<< DAC_SDATA2_SEL_SHIFT);

		reg_val &= ~(DAC_SDATA1_SEL_DEFAULT_MASK
			<< DAC_SDATA1_SEL_SHIFT);
		reg_val |= ((DAP_CTRL_SEL_DAP1 - DAP_CTRL_SEL_DAP1)
			<< DAC_SDATA1_SEL_SHIFT);

		reg_val &= ~(DAC_CLK_SEL_DEFAULT_MASK << DAC_CLK_SEL_SHIFT);
		reg_val |= (DAP_CTRL_SEL_DAP1 << DAC_CLK_SEL_SHIFT);

		das_writel(reg_val, APB_MISC_DAS_DAC_INPUT_DATA_CLK_SEL_0);
	} else {
		das_writel(DAP_CTRL_SEL_DAP3, APB_MISC_DAS_DAP_CTRL_SEL_1);
		das_writel((DAP_MS_SEL_MASTER | DAP_CTRL_SEL_DAP2),
			APB_MISC_DAS_DAP_CTRL_SEL_2);
	}
}