Re: Finding 'orphaned' i2c drivers

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

 



On Mon, Feb 23, 2009 at 10:16 AM, Jon Smirl <jonsmirl@xxxxxxxxx> wrote:
> On Mon, Feb 23, 2009 at 9:43 AM, Daniel Mack <daniel@xxxxxxxx> wrote:
>> Hi,
>>
>> On Mon, Feb 23, 2009 at 09:38:45AM -0500, Jon Smirl wrote:
>>> On Mon, Feb 23, 2009 at 6:00 AM, Daniel Mack <daniel@xxxxxxxx> wrote:
>>> > what's the suggested way of implementing an i2c drver which does not
>>> > have any other interfaces to the outside world than just the i2c device
>>> > it is communicating with? More specifically, I implemented a driver for a
>>> > Maxim clock generator and would like to use a proprietary interface with
>>> > it from a alsa-soc module. I just can't find a sane way to access the
>>> > driver's instance from there. It does exist somewhere in the linux
>>> > device tree, but is there a simple function that iterates over it and
>>> > returns it to me by name? Reading include/linux/device.h didn't point me
>>> > to anything that could fit.
>>>
>>> The max9485? Which codec are you using it with? I tried submitting the
>>> attached driver for the chip but Jean said it was too simple of a
>>> driver.
>>
>> Yes, it's the same one.
>>
>>> I use it like this:
>>>
>>> static int dspeak01_fabric_hw_params(struct snd_pcm_substream
>>> *substream, struct snd_pcm_hw_params *params)
>>> {
>>>       uint rate, select;
>>>       int ret;
>>>       struct snd_soc_pcm_runtime *rtd = substream->private_data;
>>>     struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
>>>
>>>       printk("dspeak01_fabric_hw_params\n");
>>>
>>>       switch (params_rate(params)) {
>>>       case 11025:
>>>       case 22050:
>>>       case 44100:
>>>       case 88200:
>>>       case 176400:
>>>               rate = 22579200;
>>>               select = MAX9485_225792;
>>>               break;
>>>       default:
>>>               rate = 24576000;
>>>               select = MAX9485_245760;
>>>               break;
>>>       }
>>>       max9485_set(fabric.clock, select | MAX9485_CLK_OUT_2);
>>
>> I still don't see where you got the pointer from you are using here, and
>> that's my whole question.
>
> I'm on PowerPC, we have device tree.
>
>                i2c@3d00 {
>                        #address-cells = <1>;
>                        #size-cells = <0>;
>                        compatible = "fsl,mpc5200b-i2c","fsl,mpc5200-i2c","fsl-i2c";
>                        cell-index = <0>;
>                        reg = <0x3d00 0x40>;
>                        interrupts = <0x2 0xf 0x0>;
>                        interrupt-parent = <&mpc5200_pic>;
>                        fsl5200-clocking;
>
>                        tas0:codec@1b {
>                                compatible = "ti,tas5504";
>                                reg = <0x1b>;
>                        };
>                        clock0:clock@68 {
>                                compatible = "maxim,max9485";
>                                reg = <0x68>;
>                        };
>                };
>
>                fabric { /* audio fabric hardware */
>                        compatible = "dspeak01-fabric";
>                        clock-handle = <&clock0>;
>                };
>

In the fabric driver I use clock-handle and call
struct i2c_client *of_find_i2c_device_by_node(struct device_node *node)
{

To get the driver of the i2c device.

>
>>
>> Your driver looks very much like the one I wrote, though ;)
>>
>> Daniel
>>
>>
>
>
>
> --
> Jon Smirl
> jonsmirl@xxxxxxxxx
>



-- 
Jon Smirl
jonsmirl@xxxxxxxxx
--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux