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

Commit a7e4c6a7 authored by Roland Stigge's avatar Roland Stigge
Browse files

Merge branch 'lpc32xx/drivers' of...

Merge branch 'lpc32xx/drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc into lpc32xx/tmp

Conflicts:
	arch/arm/mach-lpc32xx/clock.c
parents 73d43d00 678a0222
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -721,6 +721,41 @@ static struct clk clk_tsc = {
	.get_rate	= local_return_parent_rate,
};

static int adc_onoff_enable(struct clk *clk, int enable)
{
	u32 tmp;
	u32 divider;

	/* Use PERIPH_CLOCK */
	tmp = __raw_readl(LPC32XX_CLKPWR_ADC_CLK_CTRL_1);
	tmp |= LPC32XX_CLKPWR_ADCCTRL1_PCLK_SEL;
	/*
	 * Set clock divider so that we have equal to or less than
	 * 4.5MHz clock at ADC
	 */
	divider = clk->get_rate(clk) / 4500000 + 1;
	tmp |= divider;
	__raw_writel(tmp, LPC32XX_CLKPWR_ADC_CLK_CTRL_1);

	/* synchronize rate of this clock w/ actual HW setting */
	clk->rate = clk->get_rate(clk->parent) / divider;

	if (enable == 0)
		__raw_writel(0, clk->enable_reg);
	else
		__raw_writel(clk->enable_mask, clk->enable_reg);

	return 0;
}

static struct clk clk_adc = {
	.parent		= &clk_pclk,
	.enable		= adc_onoff_enable,
	.enable_reg	= LPC32XX_CLKPWR_ADC_CLK_CTRL,
	.enable_mask	= LPC32XX_CLKPWR_ADC32CLKCTRL_CLK_EN,
	.get_rate	= local_return_parent_rate,
};

static int mmc_onoff_enable(struct clk *clk, int enable)
{
	u32 tmp;
@@ -1057,6 +1092,7 @@ static struct clk_lookup lookups[] = {
	_REGISTER_CLOCK("lpc32xx-nand.0", "nand_ck", clk_nand)
	_REGISTER_CLOCK(NULL, "i2s0_ck", clk_i2s0)
	_REGISTER_CLOCK(NULL, "i2s1_ck", clk_i2s1)
	_REGISTER_CLOCK("lpc32xx-adc", NULL, clk_adc)
	_REGISTER_CLOCK("ts-lpc32xx", NULL, clk_tsc)
	_REGISTER_CLOCK("dev:mmc0", NULL, clk_mmc)
	_REGISTER_CLOCK("lpc-net.0", NULL, clk_net)
+22 −0
Original line number Diff line number Diff line
@@ -137,6 +137,28 @@ struct platform_device lpc32xx_rtc_device = {
	.resource = lpc32xx_rtc_resources,
};

/*
 * ADC support
 */
static struct resource adc_resources[] = {
	{
		.start = LPC32XX_ADC_BASE,
		.end = LPC32XX_ADC_BASE + SZ_4K - 1,
		.flags = IORESOURCE_MEM,
	}, {
		.start = IRQ_LPC32XX_TS_IRQ,
		.end = IRQ_LPC32XX_TS_IRQ,
		.flags = IORESOURCE_IRQ,
	},
};

struct platform_device lpc32xx_adc_device = {
	.name =  "lpc32xx-adc",
	.id = -1,
	.num_resources = ARRAY_SIZE(adc_resources),
	.resource = adc_resources,
};

/*
 * Returns the unique ID for the device
 */
+1 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ extern struct platform_device lpc32xx_i2c0_device;
extern struct platform_device lpc32xx_i2c1_device;
extern struct platform_device lpc32xx_i2c2_device;
extern struct platform_device lpc32xx_tsc_device;
extern struct platform_device lpc32xx_adc_device;
extern struct platform_device lpc32xx_rtc_device;

/*
+1 −0
Original line number Diff line number Diff line
@@ -278,6 +278,7 @@ static struct platform_device *phy3250_devs[] __initdata = {
	&lpc32xx_i2c2_device,
	&lpc32xx_watchdog_device,
	&lpc32xx_gpio_led_device,
	&lpc32xx_adc_device,
};

static struct amba_device *amba_devs[] __initdata = {