mirror of
https://github.com/torvalds/linux.git
synced 2024-11-08 13:11:45 +00:00
iio: mxs: Add MX23 support into the IIO driver
This patch adds support for i.MX23 into the LRADC driver. The LRADC block on MX23 is not much different from the one on MX28, thus this is only a few changes fixing the parts that are specific to MX23. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Fabio Estevam <fabio.estevam@freescale.com> Cc: Jonathan Cameron <jic23@kernel.org> Cc: Shawn Guo <shawn.guo@linaro.org> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:
parent
232827fb81
commit
5e1f9aca0a
@ -119,12 +119,12 @@ config LPC32XX_ADC
|
|||||||
via sysfs.
|
via sysfs.
|
||||||
|
|
||||||
config MXS_LRADC
|
config MXS_LRADC
|
||||||
tristate "Freescale i.MX28 LRADC"
|
tristate "Freescale i.MX23/i.MX28 LRADC"
|
||||||
depends on ARCH_MXS
|
depends on ARCH_MXS
|
||||||
select IIO_BUFFER
|
select IIO_BUFFER
|
||||||
select IIO_TRIGGERED_BUFFER
|
select IIO_TRIGGERED_BUFFER
|
||||||
help
|
help
|
||||||
Say yes here to build support for i.MX28 LRADC convertor
|
Say yes here to build support for i.MX23/i.MX28 LRADC convertor
|
||||||
built into these chips.
|
built into these chips.
|
||||||
|
|
||||||
To compile this driver as a module, choose M here: the
|
To compile this driver as a module, choose M here: the
|
||||||
|
@ -76,7 +76,24 @@
|
|||||||
*/
|
*/
|
||||||
#define LRADC_TS_SAMPLE_AMOUNT 4
|
#define LRADC_TS_SAMPLE_AMOUNT 4
|
||||||
|
|
||||||
static const char * const mxs_lradc_irq_name[] = {
|
enum mxs_lradc_id {
|
||||||
|
IMX23_LRADC,
|
||||||
|
IMX28_LRADC,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char * const mx23_lradc_irq_names[] = {
|
||||||
|
"mxs-lradc-touchscreen",
|
||||||
|
"mxs-lradc-channel0",
|
||||||
|
"mxs-lradc-channel1",
|
||||||
|
"mxs-lradc-channel2",
|
||||||
|
"mxs-lradc-channel3",
|
||||||
|
"mxs-lradc-channel4",
|
||||||
|
"mxs-lradc-channel5",
|
||||||
|
"mxs-lradc-channel6",
|
||||||
|
"mxs-lradc-channel7",
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char * const mx28_lradc_irq_names[] = {
|
||||||
"mxs-lradc-touchscreen",
|
"mxs-lradc-touchscreen",
|
||||||
"mxs-lradc-thresh0",
|
"mxs-lradc-thresh0",
|
||||||
"mxs-lradc-thresh1",
|
"mxs-lradc-thresh1",
|
||||||
@ -92,6 +109,22 @@ static const char * const mxs_lradc_irq_name[] = {
|
|||||||
"mxs-lradc-button1",
|
"mxs-lradc-button1",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct mxs_lradc_of_config {
|
||||||
|
const int irq_count;
|
||||||
|
const char * const *irq_name;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct mxs_lradc_of_config const mxs_lradc_of_config[] = {
|
||||||
|
[IMX23_LRADC] = {
|
||||||
|
.irq_count = ARRAY_SIZE(mx23_lradc_irq_names),
|
||||||
|
.irq_name = mx23_lradc_irq_names,
|
||||||
|
},
|
||||||
|
[IMX28_LRADC] = {
|
||||||
|
.irq_count = ARRAY_SIZE(mx28_lradc_irq_names),
|
||||||
|
.irq_name = mx28_lradc_irq_names,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
enum mxs_lradc_ts {
|
enum mxs_lradc_ts {
|
||||||
MXS_LRADC_TOUCHSCREEN_NONE = 0,
|
MXS_LRADC_TOUCHSCREEN_NONE = 0,
|
||||||
MXS_LRADC_TOUCHSCREEN_4WIRE,
|
MXS_LRADC_TOUCHSCREEN_4WIRE,
|
||||||
@ -857,8 +890,19 @@ static void mxs_lradc_hw_stop(struct mxs_lradc *lradc)
|
|||||||
writel(0, lradc->base + LRADC_DELAY(i));
|
writel(0, lradc->base + LRADC_DELAY(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct of_device_id mxs_lradc_dt_ids[] = {
|
||||||
|
{ .compatible = "fsl,imx23-lradc", .data = (void *)IMX23_LRADC, },
|
||||||
|
{ .compatible = "fsl,imx28-lradc", .data = (void *)IMX28_LRADC, },
|
||||||
|
{ /* sentinel */ }
|
||||||
|
};
|
||||||
|
MODULE_DEVICE_TABLE(of, mxs_lradc_dt_ids);
|
||||||
|
|
||||||
static int mxs_lradc_probe(struct platform_device *pdev)
|
static int mxs_lradc_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
|
const struct of_device_id *of_id =
|
||||||
|
of_match_device(mxs_lradc_dt_ids, &pdev->dev);
|
||||||
|
const struct mxs_lradc_of_config *of_cfg =
|
||||||
|
&mxs_lradc_of_config[(enum mxs_lradc_id)of_id->data];
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
struct device_node *node = dev->of_node;
|
struct device_node *node = dev->of_node;
|
||||||
struct mxs_lradc *lradc;
|
struct mxs_lradc *lradc;
|
||||||
@ -902,7 +946,7 @@ static int mxs_lradc_probe(struct platform_device *pdev)
|
|||||||
ts_wires);
|
ts_wires);
|
||||||
|
|
||||||
/* Grab all IRQ sources */
|
/* Grab all IRQ sources */
|
||||||
for (i = 0; i < 13; i++) {
|
for (i = 0; i < of_cfg->irq_count; i++) {
|
||||||
lradc->irq[i] = platform_get_irq(pdev, i);
|
lradc->irq[i] = platform_get_irq(pdev, i);
|
||||||
if (lradc->irq[i] < 0) {
|
if (lradc->irq[i] < 0) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
@ -911,7 +955,7 @@ static int mxs_lradc_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
ret = devm_request_irq(dev, lradc->irq[i],
|
ret = devm_request_irq(dev, lradc->irq[i],
|
||||||
mxs_lradc_handle_irq, 0,
|
mxs_lradc_handle_irq, 0,
|
||||||
mxs_lradc_irq_name[i], iio);
|
of_cfg->irq_name[i], iio);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_addr;
|
goto err_addr;
|
||||||
}
|
}
|
||||||
@ -983,12 +1027,6 @@ static int mxs_lradc_remove(struct platform_device *pdev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct of_device_id mxs_lradc_dt_ids[] = {
|
|
||||||
{ .compatible = "fsl,imx28-lradc", },
|
|
||||||
{ /* sentinel */ }
|
|
||||||
};
|
|
||||||
MODULE_DEVICE_TABLE(of, mxs_lradc_dt_ids);
|
|
||||||
|
|
||||||
static struct platform_driver mxs_lradc_driver = {
|
static struct platform_driver mxs_lradc_driver = {
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = DRIVER_NAME,
|
.name = DRIVER_NAME,
|
||||||
|
Loading…
Reference in New Issue
Block a user