Staging/iio/adc/touchscreen/MXS: add proper clock handling
The delay units inside the LRADC depend on the presence of a 2 kHz clock. This change enables the clock to be able to use the delay unit for the touchscreen part of the driver. Signed-off-by: Juergen Beisert <jbe@pengutronix.de> Tested-by: Marek Vasut <marex@denx.de> Acked-by: Marek Vasut <marex@denx.de> Tested-by: Lothar Waßmann <LW@KARO-electronics.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:
parent
dd28e48278
commit
18da755de5
|
@ -430,6 +430,7 @@
|
||||||
reg = <0x80050000 0x2000>;
|
reg = <0x80050000 0x2000>;
|
||||||
interrupts = <36 37 38 39 40 41 42 43 44>;
|
interrupts = <36 37 38 39 40 41 42 43 44>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
clocks = <&clks 26>;
|
||||||
};
|
};
|
||||||
|
|
||||||
spdif@80054000 {
|
spdif@80054000 {
|
||||||
|
|
|
@ -902,6 +902,7 @@
|
||||||
interrupts = <10 14 15 16 17 18 19
|
interrupts = <10 14 15 16 17 18 19
|
||||||
20 21 22 23 24 25>;
|
20 21 22 23 24 25>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
clocks = <&clks 41>;
|
||||||
};
|
};
|
||||||
|
|
||||||
spdif: spdif@80054000 {
|
spdif: spdif@80054000 {
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#include <linux/completion.h>
|
#include <linux/completion.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
|
#include <linux/clk.h>
|
||||||
|
|
||||||
#include <linux/iio/iio.h>
|
#include <linux/iio/iio.h>
|
||||||
#include <linux/iio/buffer.h>
|
#include <linux/iio/buffer.h>
|
||||||
|
@ -134,6 +135,8 @@ struct mxs_lradc {
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
int irq[13];
|
int irq[13];
|
||||||
|
|
||||||
|
struct clk *clk;
|
||||||
|
|
||||||
uint32_t *buffer;
|
uint32_t *buffer;
|
||||||
struct iio_trigger *trig;
|
struct iio_trigger *trig;
|
||||||
|
|
||||||
|
@ -922,6 +925,17 @@ static int mxs_lradc_probe(struct platform_device *pdev)
|
||||||
if (IS_ERR(lradc->base))
|
if (IS_ERR(lradc->base))
|
||||||
return PTR_ERR(lradc->base);
|
return PTR_ERR(lradc->base);
|
||||||
|
|
||||||
|
lradc->clk = devm_clk_get(&pdev->dev, NULL);
|
||||||
|
if (IS_ERR(lradc->clk)) {
|
||||||
|
dev_err(dev, "Failed to get the delay unit clock\n");
|
||||||
|
return PTR_ERR(lradc->clk);
|
||||||
|
}
|
||||||
|
ret = clk_prepare_enable(lradc->clk);
|
||||||
|
if (ret != 0) {
|
||||||
|
dev_err(dev, "Failed to enable the delay unit clock\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
INIT_WORK(&lradc->ts_work, mxs_lradc_ts_work);
|
INIT_WORK(&lradc->ts_work, mxs_lradc_ts_work);
|
||||||
|
|
||||||
/* Check if touchscreen is enabled in DT. */
|
/* Check if touchscreen is enabled in DT. */
|
||||||
|
@ -1014,6 +1028,7 @@ static int mxs_lradc_remove(struct platform_device *pdev)
|
||||||
mxs_lradc_trigger_remove(iio);
|
mxs_lradc_trigger_remove(iio);
|
||||||
iio_triggered_buffer_cleanup(iio);
|
iio_triggered_buffer_cleanup(iio);
|
||||||
|
|
||||||
|
clk_disable_unprepare(lradc->clk);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue