Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8402ed30 authored by Eric Bénard's avatar Eric Bénard Committed by Sascha Hauer
Browse files

i.MX25: add AUDMUX and SSI support



* add clocks for audmux and ssi 1 & 2
* add irq for ssi 1 & 2
* add devices platform for ssi1 & 2
* update audmux-v2 for i.MX25
* add base addresses for audmux & ssi 1 & 2
* add iomux configuration for GPIO for AUD5 port

Signed-off-by: default avatarEric Bénard <eric@eukrea.com>
Signed-off-by: default avatarSascha Hauer <s.hauer@pengutronix.de>
parent 2518507f
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -109,6 +109,16 @@ static unsigned long get_rate_uart(struct clk *clk)
	return get_rate_per(15);
}

static unsigned long get_rate_ssi2(struct clk *clk)
{
	return get_rate_per(14);
}

static unsigned long get_rate_ssi1(struct clk *clk)
{
	return get_rate_per(13);
}

static unsigned long get_rate_i2c(struct clk *clk)
{
	return get_rate_per(6);
@@ -171,6 +181,8 @@ static void clk_cgcr_disable(struct clk *clk)

DEFINE_CLOCK(gpt_clk,    0, CCM_CGCR0,  5, get_rate_gpt, NULL, NULL);
DEFINE_CLOCK(uart_per_clk, 0, CCM_CGCR0, 15, get_rate_uart, NULL, NULL);
DEFINE_CLOCK(ssi1_per_clk, 0, CCM_CGCR0, 13, get_rate_ipg, NULL, NULL);
DEFINE_CLOCK(ssi2_per_clk, 0, CCM_CGCR0, 14, get_rate_ipg, NULL, NULL);
DEFINE_CLOCK(cspi1_clk,  0, CCM_CGCR1,  5, get_rate_ipg, NULL, NULL);
DEFINE_CLOCK(cspi2_clk,  0, CCM_CGCR1,  6, get_rate_ipg, NULL, NULL);
DEFINE_CLOCK(cspi3_clk,  0, CCM_CGCR1,  7, get_rate_ipg, NULL, NULL);
@@ -194,6 +206,9 @@ DEFINE_CLOCK(i2c_clk, 0, CCM_CGCR0, 6, get_rate_i2c, NULL, NULL);
DEFINE_CLOCK(fec_clk,	 0, CCM_CGCR1, 15, get_rate_ipg, NULL, &fec_ahb_clk);
DEFINE_CLOCK(dryice_clk, 0, CCM_CGCR1,  8, get_rate_ipg, NULL, NULL);
DEFINE_CLOCK(lcdc_clk,	 0, CCM_CGCR1, 29, get_rate_lcdc, NULL, &lcdc_per_clk);
DEFINE_CLOCK(ssi1_clk,  0, CCM_CGCR2, 11, get_rate_ssi1, NULL, &ssi1_per_clk);
DEFINE_CLOCK(ssi2_clk,  1, CCM_CGCR2, 12, get_rate_ssi2, NULL, &ssi2_per_clk);
DEFINE_CLOCK(audmux_clk, 0, CCM_CGCR1, 0, NULL, NULL, NULL);

#define _REGISTER_CLOCK(d, n, c)	\
	{				\
@@ -228,6 +243,9 @@ static struct clk_lookup lookups[] = {
	_REGISTER_CLOCK("fec.0", NULL, fec_clk)
	_REGISTER_CLOCK("imxdi_rtc.0", NULL, dryice_clk)
	_REGISTER_CLOCK("imx-fb.0", NULL, lcdc_clk)
	_REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk)
	_REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk)
	_REGISTER_CLOCK(NULL, "audmux", audmux_clk)
};

int __init mx25_clocks_init(void)
+38 −0
Original line number Diff line number Diff line
@@ -533,3 +533,41 @@ struct platform_device mx25_kpp_device = {
	.num_resources	= ARRAY_SIZE(mx25_kpp_resources),
	.resource	= mx25_kpp_resources,
};

static struct resource imx_ssi_resources0[] = {
	{
		.start	= MX25_SSI1_BASE_ADDR,
		.end	= MX25_SSI1_BASE_ADDR + 0x3fff,
		.flags	= IORESOURCE_MEM,
	}, {
		.start	= MX25_INT_SSI1,
		.end	= MX25_INT_SSI1,
		.flags	= IORESOURCE_IRQ,
	},
};

static struct resource imx_ssi_resources1[] = {
	{
		.start	= MX25_SSI2_BASE_ADDR,
		.end	= MX25_SSI2_BASE_ADDR + 0x3fff,
		.flags	= IORESOURCE_MEM
	}, {
		.start	= MX25_INT_SSI2,
		.end	= MX25_INT_SSI2,
		.flags	= IORESOURCE_IRQ,
	},
};

struct platform_device imx_ssi_device0 = {
	.name = "imx-ssi",
	.id = 0,
	.num_resources = ARRAY_SIZE(imx_ssi_resources0),
	.resource = imx_ssi_resources0,
};

struct platform_device imx_ssi_device1 = {
	.name = "imx-ssi",
	.id = 1,
	.num_resources = ARRAY_SIZE(imx_ssi_resources1),
	.resource = imx_ssi_resources1,
};
+2 −0
Original line number Diff line number Diff line
@@ -23,3 +23,5 @@ extern struct platform_device mx25_rtc_device;
extern struct platform_device mx25_fb_device;
extern struct platform_device mxc_wdt;
extern struct platform_device mx25_kpp_device;
extern struct platform_device imx_ssi_device0;
extern struct platform_device imx_ssi_device1;
+1 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ config ARCH_MX25
	select CPU_ARM926T
	select ARCH_MXC_IOMUX_V3
	select HAVE_FB_IMX
	select ARCH_MXC_AUDMUX_V2
	help
	  This enables support for systems based on the Freescale i.MX25 family

+14 −1
Original line number Diff line number Diff line
@@ -191,6 +191,7 @@ static int mxc_audmux_v2_init(void)
{
	int ret;

#if defined(CONFIG_ARCH_MX3)
	if (cpu_is_mx31())
		audmux_base = MX31_IO_ADDRESS(MX31_AUDMUX_BASE_ADDR);

@@ -204,7 +205,19 @@ static int mxc_audmux_v2_init(void)
		}
		audmux_base = MX35_IO_ADDRESS(MX35_AUDMUX_BASE_ADDR);
	}

#endif
#if defined(CONFIG_ARCH_MX25)
	if (cpu_is_mx25()) {
		audmux_clk = clk_get(NULL, "audmux");
		if (IS_ERR(audmux_clk)) {
			ret = PTR_ERR(audmux_clk);
			printk(KERN_ERR "%s: cannot get clock: %d\n", __func__,
					ret);
			return ret;
		}
		audmux_base = MX25_IO_ADDRESS(MX25_AUDMUX_BASE_ADDR);
	}
#endif
	audmux_debugfs_init();

	return 0;
Loading