Re: [PATCH v3 5/5] iio: adc: add viperboard adc driver
On 11/05/2012 02:48 PM, Lars Poeschel wrote: > From: Lars Poeschel > > This adds the mfd cell to use the adc part of the Nano River Technologies > viperboard. > One utter nitpick inline (nice to clean up but totally trivial) > Signed-off-by: Lars Poeschel Acked-by: Jonathan Cameron As there is a clear dependence on the mfd elements here this should probably go though Samuel's tree once people are happy with the other elements. > --- > drivers/iio/adc/Kconfig |7 ++ > drivers/iio/adc/Makefile |1 + > drivers/iio/adc/viperboard_adc.c | 181 > ++ > drivers/mfd/viperboard.c |3 + > include/linux/mfd/viperboard.h |1 + > 5 files changed, 193 insertions(+) > create mode 100644 drivers/iio/adc/viperboard_adc.c > > diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig > index 4927581..35ad77d 100644 > --- a/drivers/iio/adc/Kconfig > +++ b/drivers/iio/adc/Kconfig > @@ -60,4 +60,11 @@ config LP8788_ADC > help > Say yes here to build support for TI LP8788 ADC. > > +config VIPERBOARD_ADC > + tristate "Viperboard ADC support" > + depends on MFD_VIPERBOARD && USB > + help > + Say yes here to access the ADC part of the Nano River > + Technologies Viperboard. > + > endmenu > diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile > index 900995d..4852c2e 100644 > --- a/drivers/iio/adc/Makefile > +++ b/drivers/iio/adc/Makefile > @@ -8,3 +8,4 @@ obj-$(CONFIG_AD7476) += ad7476.o > obj-$(CONFIG_AD7791) += ad7791.o > obj-$(CONFIG_AT91_ADC) += at91_adc.o > obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o > +obj-$(CONFIG_VIPERBOARD_ADC) += viperboard_adc.o > diff --git a/drivers/iio/adc/viperboard_adc.c > b/drivers/iio/adc/viperboard_adc.c > new file mode 100644 > index 000..58345c7 > --- /dev/null > +++ b/drivers/iio/adc/viperboard_adc.c > @@ -0,0 +1,181 @@ > +/* > + * Nano River Technologies viperboard iio ADC driver IIO (told you it was a nitpick). > + * > + * (C) 2012 by Lemonage GmbH > + * Author: Lars Poeschel > + * All rights reserved. > + * > + * This program is free software; you can redistribute it and/or modify it > + * under the terms of the GNU General Public License as published by the > + * Free Software Foundation; either version 2 of the License, or (at > your > + * option) any later version. > + * > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include > +#include > + > +#include > + > +#define VPRBRD_ADC_CMD_GET 0x00 > + > +struct vprbrd_adc_msg { > + u8 cmd; > + u8 chan; > + u8 val; > +} __packed; > + > +struct vprbrd_adc { > + struct vprbrd *vb; > +}; > + > +#define VPRBRD_ADC_CHANNEL(_index) { \ > + .type = IIO_VOLTAGE,\ > + .indexed = 1, \ > + .channel = _index, \ > + .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT,\ > + .scan_index = _index, \ > + .scan_type = { \ > + .sign = 'u',\ > + .realbits = 8, \ > + .storagebits = 8, \ > + }, \ > +} > + > +static struct iio_chan_spec const vprbrd_adc_iio_channels[] = { > + VPRBRD_ADC_CHANNEL(0), > + VPRBRD_ADC_CHANNEL(1), > + VPRBRD_ADC_CHANNEL(2), > + VPRBRD_ADC_CHANNEL(3), > +}; > + > +static int vprbrd_iio_read_raw(struct iio_dev *iio_dev, > + struct iio_chan_spec const *chan, > + int *val, > + int *val2, > + long info) > +{ > + int ret, error = 0; > + struct vprbrd_adc *adc = iio_priv(iio_dev); > + struct vprbrd *vb = adc->vb; > + struct vprbrd_adc_msg *admsg = (struct vprbrd_adc_msg *)vb->buf; > + > + switch (info) { > + case IIO_CHAN_INFO_RAW: > + mutex_lock(>lock); > + > + admsg->cmd = VPRBRD_ADC_CMD_GET; > + admsg->chan = chan->scan_index; > + admsg->val = 0x00; > + > + ret = usb_control_msg(vb->usb_dev, > + usb_sndctrlpipe(vb->usb_dev, 0), VPRBRD_USB_REQUEST_ADC, > + VPRBRD_USB_TYPE_OUT, 0x, 0x, admsg, > + sizeof(struct vprbrd_adc_msg), VPRBRD_USB_TIMEOUT_MS); > + if (ret != sizeof(struct vprbrd_adc_msg)) { > + dev_err(_dev->dev, "usb send error on adc read\n"); > + error = -EREMOTEIO; > + } > + > + ret = usb_control_msg(vb->usb_dev, > + usb_rcvctrlpipe(vb->usb_dev, 0), VPRBRD_USB_REQUEST_ADC, > + VPRBRD_USB_TYPE_IN, 0x, 0x, admsg, > +
Re: [PATCH v3 5/5] iio: adc: add viperboard adc driver
On 11/05/2012 03:48 PM, Lars Poeschel wrote: > From: Lars Poeschel > > This adds the mfd cell to use the adc part of the Nano River Technologies > viperboard. > > Signed-off-by: Lars Poeschel Looks good to me. Reviewed-by: Lars-Peter Clausen If you happen to resend the series there is one tiny bit that could be changed, but no need to resend the series just for this. > --- > drivers/iio/adc/Kconfig |7 ++ > drivers/iio/adc/Makefile |1 + > drivers/iio/adc/viperboard_adc.c | 181 > ++ > drivers/mfd/viperboard.c |3 + > include/linux/mfd/viperboard.h |1 + > 5 files changed, 193 insertions(+) > create mode 100644 drivers/iio/adc/viperboard_adc.c > > + > +static int __devinit vprbrd_adc_probe(struct platform_device *pdev) > +{ > + struct vprbrd *vb = dev_get_drvdata(pdev->dev.parent); > + struct vprbrd_adc *adc; > + struct iio_dev *indio_dev; > + int ret; > + > + /* registering iio */ > + indio_dev = iio_device_alloc(sizeof(struct vprbrd_adc)); sizeof(*adc) > + if (!indio_dev) { > + dev_err(>dev, "failed allocating iio device\n"); > + return -ENOMEM; > + } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH v3 5/5] iio: adc: add viperboard adc driver
From: Lars Poeschel This adds the mfd cell to use the adc part of the Nano River Technologies viperboard. Signed-off-by: Lars Poeschel --- drivers/iio/adc/Kconfig |7 ++ drivers/iio/adc/Makefile |1 + drivers/iio/adc/viperboard_adc.c | 181 ++ drivers/mfd/viperboard.c |3 + include/linux/mfd/viperboard.h |1 + 5 files changed, 193 insertions(+) create mode 100644 drivers/iio/adc/viperboard_adc.c diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig index 4927581..35ad77d 100644 --- a/drivers/iio/adc/Kconfig +++ b/drivers/iio/adc/Kconfig @@ -60,4 +60,11 @@ config LP8788_ADC help Say yes here to build support for TI LP8788 ADC. +config VIPERBOARD_ADC + tristate "Viperboard ADC support" + depends on MFD_VIPERBOARD && USB + help + Say yes here to access the ADC part of the Nano River + Technologies Viperboard. + endmenu diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile index 900995d..4852c2e 100644 --- a/drivers/iio/adc/Makefile +++ b/drivers/iio/adc/Makefile @@ -8,3 +8,4 @@ obj-$(CONFIG_AD7476) += ad7476.o obj-$(CONFIG_AD7791) += ad7791.o obj-$(CONFIG_AT91_ADC) += at91_adc.o obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o +obj-$(CONFIG_VIPERBOARD_ADC) += viperboard_adc.o diff --git a/drivers/iio/adc/viperboard_adc.c b/drivers/iio/adc/viperboard_adc.c new file mode 100644 index 000..58345c7 --- /dev/null +++ b/drivers/iio/adc/viperboard_adc.c @@ -0,0 +1,181 @@ +/* + * Nano River Technologies viperboard iio ADC driver + * + * (C) 2012 by Lemonage GmbH + * Author: Lars Poeschel + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#define VPRBRD_ADC_CMD_GET 0x00 + +struct vprbrd_adc_msg { + u8 cmd; + u8 chan; + u8 val; +} __packed; + +struct vprbrd_adc { + struct vprbrd *vb; +}; + +#define VPRBRD_ADC_CHANNEL(_index) { \ + .type = IIO_VOLTAGE,\ + .indexed = 1, \ + .channel = _index, \ + .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT,\ + .scan_index = _index, \ + .scan_type = { \ + .sign = 'u',\ + .realbits = 8, \ + .storagebits = 8, \ + }, \ +} + +static struct iio_chan_spec const vprbrd_adc_iio_channels[] = { + VPRBRD_ADC_CHANNEL(0), + VPRBRD_ADC_CHANNEL(1), + VPRBRD_ADC_CHANNEL(2), + VPRBRD_ADC_CHANNEL(3), +}; + +static int vprbrd_iio_read_raw(struct iio_dev *iio_dev, + struct iio_chan_spec const *chan, + int *val, + int *val2, + long info) +{ + int ret, error = 0; + struct vprbrd_adc *adc = iio_priv(iio_dev); + struct vprbrd *vb = adc->vb; + struct vprbrd_adc_msg *admsg = (struct vprbrd_adc_msg *)vb->buf; + + switch (info) { + case IIO_CHAN_INFO_RAW: + mutex_lock(>lock); + + admsg->cmd = VPRBRD_ADC_CMD_GET; + admsg->chan = chan->scan_index; + admsg->val = 0x00; + + ret = usb_control_msg(vb->usb_dev, + usb_sndctrlpipe(vb->usb_dev, 0), VPRBRD_USB_REQUEST_ADC, + VPRBRD_USB_TYPE_OUT, 0x, 0x, admsg, + sizeof(struct vprbrd_adc_msg), VPRBRD_USB_TIMEOUT_MS); + if (ret != sizeof(struct vprbrd_adc_msg)) { + dev_err(_dev->dev, "usb send error on adc read\n"); + error = -EREMOTEIO; + } + + ret = usb_control_msg(vb->usb_dev, + usb_rcvctrlpipe(vb->usb_dev, 0), VPRBRD_USB_REQUEST_ADC, + VPRBRD_USB_TYPE_IN, 0x, 0x, admsg, + sizeof(struct vprbrd_adc_msg), VPRBRD_USB_TIMEOUT_MS); + + *val = admsg->val; + + mutex_unlock(>lock); + + if (ret != sizeof(struct vprbrd_adc_msg)) { + dev_err(_dev->dev, "usb recv error on adc read\n"); + error = -EREMOTEIO; + } + + if (error) + goto error; + + return IIO_VAL_INT; + default: + error = -EINVAL; + break;
[PATCH v3 5/5] iio: adc: add viperboard adc driver
From: Lars Poeschel poesc...@lemonage.de This adds the mfd cell to use the adc part of the Nano River Technologies viperboard. Signed-off-by: Lars Poeschel poesc...@lemonage.de --- drivers/iio/adc/Kconfig |7 ++ drivers/iio/adc/Makefile |1 + drivers/iio/adc/viperboard_adc.c | 181 ++ drivers/mfd/viperboard.c |3 + include/linux/mfd/viperboard.h |1 + 5 files changed, 193 insertions(+) create mode 100644 drivers/iio/adc/viperboard_adc.c diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig index 4927581..35ad77d 100644 --- a/drivers/iio/adc/Kconfig +++ b/drivers/iio/adc/Kconfig @@ -60,4 +60,11 @@ config LP8788_ADC help Say yes here to build support for TI LP8788 ADC. +config VIPERBOARD_ADC + tristate Viperboard ADC support + depends on MFD_VIPERBOARD USB + help + Say yes here to access the ADC part of the Nano River + Technologies Viperboard. + endmenu diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile index 900995d..4852c2e 100644 --- a/drivers/iio/adc/Makefile +++ b/drivers/iio/adc/Makefile @@ -8,3 +8,4 @@ obj-$(CONFIG_AD7476) += ad7476.o obj-$(CONFIG_AD7791) += ad7791.o obj-$(CONFIG_AT91_ADC) += at91_adc.o obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o +obj-$(CONFIG_VIPERBOARD_ADC) += viperboard_adc.o diff --git a/drivers/iio/adc/viperboard_adc.c b/drivers/iio/adc/viperboard_adc.c new file mode 100644 index 000..58345c7 --- /dev/null +++ b/drivers/iio/adc/viperboard_adc.c @@ -0,0 +1,181 @@ +/* + * Nano River Technologies viperboard iio ADC driver + * + * (C) 2012 by Lemonage GmbH + * Author: Lars Poeschel poesc...@lemonage.de + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + */ + +#include linux/kernel.h +#include linux/errno.h +#include linux/module.h +#include linux/slab.h +#include linux/types.h +#include linux/mutex.h +#include linux/platform_device.h + +#include linux/usb.h +#include linux/iio/iio.h + +#include linux/mfd/viperboard.h + +#define VPRBRD_ADC_CMD_GET 0x00 + +struct vprbrd_adc_msg { + u8 cmd; + u8 chan; + u8 val; +} __packed; + +struct vprbrd_adc { + struct vprbrd *vb; +}; + +#define VPRBRD_ADC_CHANNEL(_index) { \ + .type = IIO_VOLTAGE,\ + .indexed = 1, \ + .channel = _index, \ + .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT,\ + .scan_index = _index, \ + .scan_type = { \ + .sign = 'u',\ + .realbits = 8, \ + .storagebits = 8, \ + }, \ +} + +static struct iio_chan_spec const vprbrd_adc_iio_channels[] = { + VPRBRD_ADC_CHANNEL(0), + VPRBRD_ADC_CHANNEL(1), + VPRBRD_ADC_CHANNEL(2), + VPRBRD_ADC_CHANNEL(3), +}; + +static int vprbrd_iio_read_raw(struct iio_dev *iio_dev, + struct iio_chan_spec const *chan, + int *val, + int *val2, + long info) +{ + int ret, error = 0; + struct vprbrd_adc *adc = iio_priv(iio_dev); + struct vprbrd *vb = adc-vb; + struct vprbrd_adc_msg *admsg = (struct vprbrd_adc_msg *)vb-buf; + + switch (info) { + case IIO_CHAN_INFO_RAW: + mutex_lock(vb-lock); + + admsg-cmd = VPRBRD_ADC_CMD_GET; + admsg-chan = chan-scan_index; + admsg-val = 0x00; + + ret = usb_control_msg(vb-usb_dev, + usb_sndctrlpipe(vb-usb_dev, 0), VPRBRD_USB_REQUEST_ADC, + VPRBRD_USB_TYPE_OUT, 0x, 0x, admsg, + sizeof(struct vprbrd_adc_msg), VPRBRD_USB_TIMEOUT_MS); + if (ret != sizeof(struct vprbrd_adc_msg)) { + dev_err(iio_dev-dev, usb send error on adc read\n); + error = -EREMOTEIO; + } + + ret = usb_control_msg(vb-usb_dev, + usb_rcvctrlpipe(vb-usb_dev, 0), VPRBRD_USB_REQUEST_ADC, + VPRBRD_USB_TYPE_IN, 0x, 0x, admsg, + sizeof(struct vprbrd_adc_msg), VPRBRD_USB_TIMEOUT_MS); + + *val = admsg-val; + + mutex_unlock(vb-lock); + + if (ret != sizeof(struct vprbrd_adc_msg)) { + dev_err(iio_dev-dev, usb recv error on adc read\n); + error =
Re: [PATCH v3 5/5] iio: adc: add viperboard adc driver
On 11/05/2012 03:48 PM, Lars Poeschel wrote: From: Lars Poeschel poesc...@lemonage.de This adds the mfd cell to use the adc part of the Nano River Technologies viperboard. Signed-off-by: Lars Poeschel poesc...@lemonage.de Looks good to me. Reviewed-by: Lars-Peter Clausen l...@metafoo.de If you happen to resend the series there is one tiny bit that could be changed, but no need to resend the series just for this. --- drivers/iio/adc/Kconfig |7 ++ drivers/iio/adc/Makefile |1 + drivers/iio/adc/viperboard_adc.c | 181 ++ drivers/mfd/viperboard.c |3 + include/linux/mfd/viperboard.h |1 + 5 files changed, 193 insertions(+) create mode 100644 drivers/iio/adc/viperboard_adc.c + +static int __devinit vprbrd_adc_probe(struct platform_device *pdev) +{ + struct vprbrd *vb = dev_get_drvdata(pdev-dev.parent); + struct vprbrd_adc *adc; + struct iio_dev *indio_dev; + int ret; + + /* registering iio */ + indio_dev = iio_device_alloc(sizeof(struct vprbrd_adc)); sizeof(*adc) + if (!indio_dev) { + dev_err(pdev-dev, failed allocating iio device\n); + return -ENOMEM; + } -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v3 5/5] iio: adc: add viperboard adc driver
On 11/05/2012 02:48 PM, Lars Poeschel wrote: From: Lars Poeschel poesc...@lemonage.de This adds the mfd cell to use the adc part of the Nano River Technologies viperboard. One utter nitpick inline (nice to clean up but totally trivial) Signed-off-by: Lars Poeschel poesc...@lemonage.de Acked-by: Jonathan Cameron ji...@kernel.org As there is a clear dependence on the mfd elements here this should probably go though Samuel's tree once people are happy with the other elements. --- drivers/iio/adc/Kconfig |7 ++ drivers/iio/adc/Makefile |1 + drivers/iio/adc/viperboard_adc.c | 181 ++ drivers/mfd/viperboard.c |3 + include/linux/mfd/viperboard.h |1 + 5 files changed, 193 insertions(+) create mode 100644 drivers/iio/adc/viperboard_adc.c diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig index 4927581..35ad77d 100644 --- a/drivers/iio/adc/Kconfig +++ b/drivers/iio/adc/Kconfig @@ -60,4 +60,11 @@ config LP8788_ADC help Say yes here to build support for TI LP8788 ADC. +config VIPERBOARD_ADC + tristate Viperboard ADC support + depends on MFD_VIPERBOARD USB + help + Say yes here to access the ADC part of the Nano River + Technologies Viperboard. + endmenu diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile index 900995d..4852c2e 100644 --- a/drivers/iio/adc/Makefile +++ b/drivers/iio/adc/Makefile @@ -8,3 +8,4 @@ obj-$(CONFIG_AD7476) += ad7476.o obj-$(CONFIG_AD7791) += ad7791.o obj-$(CONFIG_AT91_ADC) += at91_adc.o obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o +obj-$(CONFIG_VIPERBOARD_ADC) += viperboard_adc.o diff --git a/drivers/iio/adc/viperboard_adc.c b/drivers/iio/adc/viperboard_adc.c new file mode 100644 index 000..58345c7 --- /dev/null +++ b/drivers/iio/adc/viperboard_adc.c @@ -0,0 +1,181 @@ +/* + * Nano River Technologies viperboard iio ADC driver IIO (told you it was a nitpick). + * + * (C) 2012 by Lemonage GmbH + * Author: Lars Poeschel poesc...@lemonage.de + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + */ + +#include linux/kernel.h +#include linux/errno.h +#include linux/module.h +#include linux/slab.h +#include linux/types.h +#include linux/mutex.h +#include linux/platform_device.h + +#include linux/usb.h +#include linux/iio/iio.h + +#include linux/mfd/viperboard.h + +#define VPRBRD_ADC_CMD_GET 0x00 + +struct vprbrd_adc_msg { + u8 cmd; + u8 chan; + u8 val; +} __packed; + +struct vprbrd_adc { + struct vprbrd *vb; +}; + +#define VPRBRD_ADC_CHANNEL(_index) { \ + .type = IIO_VOLTAGE,\ + .indexed = 1, \ + .channel = _index, \ + .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT,\ + .scan_index = _index, \ + .scan_type = { \ + .sign = 'u',\ + .realbits = 8, \ + .storagebits = 8, \ + }, \ +} + +static struct iio_chan_spec const vprbrd_adc_iio_channels[] = { + VPRBRD_ADC_CHANNEL(0), + VPRBRD_ADC_CHANNEL(1), + VPRBRD_ADC_CHANNEL(2), + VPRBRD_ADC_CHANNEL(3), +}; + +static int vprbrd_iio_read_raw(struct iio_dev *iio_dev, + struct iio_chan_spec const *chan, + int *val, + int *val2, + long info) +{ + int ret, error = 0; + struct vprbrd_adc *adc = iio_priv(iio_dev); + struct vprbrd *vb = adc-vb; + struct vprbrd_adc_msg *admsg = (struct vprbrd_adc_msg *)vb-buf; + + switch (info) { + case IIO_CHAN_INFO_RAW: + mutex_lock(vb-lock); + + admsg-cmd = VPRBRD_ADC_CMD_GET; + admsg-chan = chan-scan_index; + admsg-val = 0x00; + + ret = usb_control_msg(vb-usb_dev, + usb_sndctrlpipe(vb-usb_dev, 0), VPRBRD_USB_REQUEST_ADC, + VPRBRD_USB_TYPE_OUT, 0x, 0x, admsg, + sizeof(struct vprbrd_adc_msg), VPRBRD_USB_TIMEOUT_MS); + if (ret != sizeof(struct vprbrd_adc_msg)) { + dev_err(iio_dev-dev, usb send error on adc read\n); + error = -EREMOTEIO; + } + + ret = usb_control_msg(vb-usb_dev, + usb_rcvctrlpipe(vb-usb_dev, 0), VPRBRD_USB_REQUEST_ADC, +