Re: [PATCH] iio: potentiometer: add driver for Maxim Integrated DS1807

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jonathan

Very old thread. I have created Giotto Tune based on this design and
now try to attach to ds1807. I have done some hack on the current
interface to have it working in alsa. I have some trouble with the API

  fragment@3 {
                target = <&sound>;
                __overlay__ {
                        compatible = "bcm2708,bcm2708-audio-giotto";
                        i2s-controller = <&i2s>;
                        io-channels = <&volume 0>;
                        #io-channel-cells = <1>;
                        nreset = <&gpio 5 1>;
                        status = "okay";
                };
        };

        fragment@4 {
                target = <&spidev0>;
                __overlay__ {
                        status = "disabled";
                };
        };

        fragment@5 {
                target = <&i2c1>;
                __overlay__ {
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "okay";

                        volume: ds1807@1 {
                                compatible = "maxim,ds1807";
                                reg = <0x28>;
                                status = "okay";
                                #io-channel-cells = <1>;
                        };
                };
        };

This is the overlay and this is the change of the API

-static int iio_channel_write(struct iio_channel *chan, int val, int val2,
+static int iio_channel_write(struct iio_channel *chan, int index, int
val, int val2,
                             enum iio_chan_info_enum info)
 {
        return chan->indio_dev->info->write_raw(chan->indio_dev,
-                                               chan->channel, val, val2, info);
+                                               &chan->channel[index],
val, val2, info);
 }

+int iio_write_channel_attribute(struct iio_channel *chan, int index,
int val, int val2,
+                                enum iio_chan_info_enum attribute)
+{
+       int ret;
+
+       mutex_lock(&chan->indio_dev->info_exist_lock);
+       if (chan->indio_dev->info == NULL) {
+               ret = -ENODEV;
+               goto err_unlock;
+       }
+
+       if (index < 0 || index > chan->indio_dev->num_channels)
+               return -EINVAL;
+
+       ret = iio_channel_write(chan, index, val, val2, attribute);
+err_unlock:
+       mutex_unlock(&chan->indio_dev->info_exist_lock);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(iio_write_channel_attribute);

I order to trigger both controls

+       ret = iio_write_channel_attribute(&data->iio_ch[0], 0,
+                                         val, 0,
+                                         IIO_CHAN_INFO_HARDWAREGAIN);
+       if (ret < 0)
+                return ret;
+
+       ret = iio_write_channel_attribute(&data->iio_ch[0], 1,
+                                         val, 0,
+                                         IIO_CHAN_INFO_HARDWAREGAIN);
+       if (ret < 0)
+                return ret;
+

The problem is that we can have one iio_dev and multiple raw value for
each one. Is this the correct way?

Michael

On Sat, May 12, 2018 at 2:10 PM Michael Nazzareno Trimarchi
<michael@xxxxxxxxxxxxxxxxxxxx> wrote:
>
> Hi
>
> On Sat, May 12, 2018 at 1:07 PM, Jonathan Cameron <jic23@xxxxxxxxxx> wrote:
> > On Sat, 12 May 2018 11:50:23 +0200
> > Michael Nazzareno Trimarchi <michael@xxxxxxxxxxxxxxxxxxxx> wrote:
> >
> >> Hi
> >>
> >> On Sat, May 12, 2018 at 11:45 AM, Jonathan Cameron <jic23@xxxxxxxxxx> wrote:
> >> > On Wed, 9 May 2018 11:19:51 +0200
> >> > Michael Nazzareno Trimarchi <michael@xxxxxxxxxxxxxxxxxxxx> wrote:
> >> >
> >> >> Hi Jonathan
> >> >>
> >> >>
> >> >> On Wed, May 9, 2018 at 11:01 AM, Michael Nazzareno Trimarchi
> >> >> <michael@xxxxxxxxxxxxxxxxxxxx> wrote:
> >> >> > Hi
> >> >> >
> >> >> > On Mon, May 7, 2018 at 7:17 PM, Jonathan Cameron <jic23@xxxxxxxxxx> wrote:
> >> >> >> On Mon, 7 May 2018 18:55:16 +0200
> >> >> >> Lars-Peter Clausen <lars@xxxxxxxxxx> wrote:
> >> >> >>
> >> >> >>> On 05/07/2018 06:44 PM, Lars-Peter Clausen wrote:
> >> >> >>> > On 05/06/2018 07:37 PM, Jonathan Cameron wrote:
> >> >> >>> >> On Sun,  6 May 2018 15:30:47 +0200
> >> >> >>> >> Michael Trimarchi <michael@xxxxxxxxxxxxxxxxxxxx> wrote:
> >> >> >>> >>
> >> >> >>> >>> The following functions are supported:
> >> >> >>> >>> - write, read potentiometer value
> >> >> >>> >>>
> >> >> >>> >>> Value are exported in DBm because it's used as an audio
> >> >> >>> >>> attenuator
> >> >> >>> >>
> >> >> >>> >> This is interesting.  The problem is that there is no way for
> >> >> >>> >> userspace to know that it is reporting in DBm rather than
> >> >> >>> >> reporting a linear gain or a straight forward resistance.
> >> >> >>> >>
> >> >> >>> >> This is rather closer in operation to the analog front end
> >> >> >>> >> driver I took the other day than to the other potentiometers
> >> >> >>> >> we have drivers for.
> >> >> >>> >>
> >> >> >>> >> Anyhow, how to solve this?  Two options come to mind.
> >> >> >>> >> 1) Look up table mapping to linear gain as per current ABI
> >> >> >>> >> 2) Add a new channel type to represent the fact we are
> >> >> >>> >> looking at a logarithmic value, letting us handle it as DB.
> >> >> >>> >
> >> >> >>> > Yeah, I guess it is a bit difficult. I don't think this should be a separate
> >> >> >>> > type since we are still describing the same thing, just the scale is
> >> >> >>> > logarithmic rather than linear. Translation table doesn't work either since
> >> >> >>> > your values would get ridiculous small/large. We could add a db suffix to
> >> >> >>> > the type, but that's just terrible. I guess the best we can do is have a
> >> >> >>> > scale attribute that says 1dB.
> >> >> >>>
> >> >> >>> The other problem of course is that dB is a relative unit. The ratio of one
> >> >> >>> value to another. Whereas our normal scale refers to an absolute value.
> >> >> >> I'm really not keen on this.  We have done the separate types
> >> >> >> for humidity already, where we had relative (which is a ratio) and absolute
> >> >> >> (which isn't).  It's not pretty though.
> >> >> >>
> >> >> >> Potentially we could define a new attribute that says this one is
> >> >> >> is db or linear but that's ugly too.
> >> >> >>
> >> >> >> As you asked, are we looking at a part that gets used for anything other
> >> >> >> than audio or not?  If just audio, alsa driver does indeed make more sense.
> >> >> >>
> >> >> >
> >> >> > This can be used in audio but even in other field. It's just a potentiometer.
> >> >> > Can I know what is wrong to use the same approch of audio ampliefier that we
> >> >> > have already in the iio tree?
> >> >> >
> >> >>
> >> >> cat /sys/bus/iio/devices/iio:device1/out_altvoltage0_hardwaregain
> >> >> -10.000000 dB
> >> >> echo -10 > /sys/bus/iio/devices/iio:device1/out_altvoltage0_hardwaregain
> >> >
> >> > Wow, somehow that entire thing had slipped my mind.  I guess we went
> >> > through the whole question of how to support dB scales years ago
> >> > and it has just been very little used.
> >> >
> >> > Hmm. Sorry for my absent mindedness! Anyhow, there are a few additional
> >> > comments that need cleaning up.
> >> >
> >> > It is going to be a little odd as the only potentiometer (I think) that
> >> > is acting as a scale free attenuator, rather that being controlled on the basis
> >> > of resistance, but for the part that seems to make sense so fair enough.
> >> >
> >> > I'm slightly curious to know what you have this wired up to though?
> >>
> >> I'm design GIOTTO ;) an audio module that use those to control the
> >> volume. It's a dsd
> >> native sound card that demultiplex i2s to L and R dsd on a pcm1795a.
> >> Everything already
> >> run under linux. The idea is to create an audio card and connect iio
> >> device to the volume
> >> to change dsd volume
> >>
> >> > Are the inputs and outputs invisible to the kernel or is this feeding
> >> > into another device?
> >>
> >> I think a reply above. Anyway we don't want to have driver duplication
> >> and I think should be land
> >> there
> >>
> >> >
> >> > If we are feeding another device then the work recently done on a
> >> > generic AFE driver may be useful.  At somepoint we'll need a version
> >>
> >> Can you point to it? I need to read about ;)
> >
> > https://patchwork.kernel.org/patch/10358131/
> >
> > Should be in linux-next by now ready for the next merge window.
> > As it turns out, probably not relevant in your case you will
> > probably want to have the sound card as a consumer so that
> > the volume control maps nicely via usual interface etc.
> >
> > Perhaps cc the relevant sound lists and maintainers on next version.
> > I don't want to tread on anyone's toes if they are of the view that
> > it shouldn't be done this way (should be fine from previous conversations
> > with a few of them!)
>
> Yes it's a good idea. I will try but I need to move my development
> board on latest
> kernel.
>
> Michael
>
> >
> > Jonathan
> >
> >>
> >> Michael
> >>
> >> > of that which deals with standalone amplifiers and attenuators anyway,
> >> > but I don't know if it is useful to you.
> >> >
> >> > Jonathan
> >> >
> >> > Jonathan
> >> >
> >> >
> >> >>
> >> >> uname -a
> >> >> Linux linaro-alip 4.4.93 #7 SMP Sun May 6 13:23:08 CEST 2018 armv7l GNU/Linux
> >> >>
> >> >> Michael
> >> >>
> >> >> > Michael
> >> >> >
> >> >> >> Jonathan
> >> >> >
> >> >> >
> >> >> >
> >> >> > --
> >> >> > | Michael Nazzareno Trimarchi                     Amarula Solutions BV |
> >> >> > | COO  -  Founder                                      Cruquiuskade 47 |
> >> >> > | +31(0)851119172                                 Amsterdam 1018 AM NL |
> >> >> > |                  [`as] http://www.amarulasolutions.com               |
> >> >>
> >> >>
> >> >>
> >> >
> >>
> >>
> >>
> >
>
>
>
> --
> | Michael Nazzareno Trimarchi                     Amarula Solutions BV |
> | COO  -  Founder                                      Cruquiuskade 47 |
> | +31(0)851119172                                 Amsterdam 1018 AM NL |
> |                  [`as] http://www.amarulasolutions.com               |



-- 
| Michael Nazzareno Trimarchi                     Amarula Solutions BV |
| COO  -  Founder                                      Cruquiuskade 47 |
| +31(0)851119172                                 Amsterdam 1018 AM NL |
|                  [`as] http://www.amarulasolutions.com               |



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux