public inbox for linux-i2c@vger.kernel.org
 help / color / mirror / Atom feed
* New Style I2C Driver : how to get clients ?
@ 2008-07-24  9:07 fuhz-GANU6spQydw
       [not found] ` <1216890432.48884640c4486-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
  0 siblings, 1 reply; 16+ messages in thread
From: fuhz-GANU6spQydw @ 2008-07-24  9:07 UTC (permalink / raw)
  To: i2c-GZX6beZjE8VD60Wz+7aTrA

Hello,

I am currently writing a I2C driver for a custom embedded board.
I have read lot about writing I2C driver using Linux I2C layer.

But there are still a few things I don't anderstand.
I am quite confuse.



I have written an algorithm and an adapter. For instance, I just register my
adapter on the module_init.

- Is it important for adapters to be registred as platform_driver ?
- Will it remove the 'forgot to specify physical address' error ?
- Can I ignore 'forgot to specify physical address' error ?


For my driver, I only implement probe(client) and remove(client).

They are never called !!


I thought the I2C layer register automatically the I2C devices present on the
bus.
Am I wrong ?

- How can I specify the addresses of my I2C clients ?
- What about i2c_probe ? Do I need to call it directly ?


Thank you for help.


Best regards.

Légion.

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: New Style I2C Driver : how to get clients ?
       [not found] ` <1216890432.48884640c4486-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
@ 2008-07-24  9:29   ` Felipe Balbi
  0 siblings, 0 replies; 16+ messages in thread
From: Felipe Balbi @ 2008-07-24  9:29 UTC (permalink / raw)
  To: fuhz-GANU6spQydw; +Cc: i2c-GZX6beZjE8VD60Wz+7aTrA

Hi,

On Thu, Jul 24, 2008 at 12:07 PM,  <fuhz-GANU6spQydw@public.gmane.org> wrote:

> - How can I specify the addresses of my I2C clients ?
> - What about i2c_probe ? Do I need to call it directly ?

basically you i2c_register_board_info() from the board file.

Take a look at arch/arm/mach-omap2/board-h2.c for
a simple example.

you'll see that it calls omap_register_i2c_bus(), but it's
just a wrapper for omap-specific initializations on top
of i2c_register_board_info();

-- 
Best Regards,

Felipe Balbi
felipebalbi-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: New Style I2C Driver : how to get clients ?
@ 2008-07-24 12:52 fuhz-GANU6spQydw
       [not found] ` <1216903949.48887b0dd2039-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
  0 siblings, 1 reply; 16+ messages in thread
From: fuhz-GANU6spQydw @ 2008-07-24 12:52 UTC (permalink / raw)
  To: i2c-GZX6beZjE8VD60Wz+7aTrA

Hi,

Thank you for your fast answer.


So, I added the register_board_info in my board init function.
I fill the i2c_board_info structure with the macro I2C_BOARD_INFO.
I define a few clients.

And so what ?

The system is supposed to call the probe(client) of the driver ?


I am really lost. I did not anderstand how to get a valid client instance.
I suppose the I2C layer says "Hey boy, you have a new client !", but when ?


What about 'static unsigned short probe[2] = { I2C_CLIENT_END, I2C_CLIENT_END
};'.
Can it help me ?


Thank you in advance.


Best regards,

Légion.

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: New Style I2C Driver : how to get clients ?
       [not found] ` <1216903949.48887b0dd2039-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
@ 2008-07-24 13:16   ` Felipe Balbi
       [not found]     ` <31e679430807240616n4bed86c7sa5c5ce69e066d0b5-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  0 siblings, 1 reply; 16+ messages in thread
From: Felipe Balbi @ 2008-07-24 13:16 UTC (permalink / raw)
  To: fuhz-GANU6spQydw; +Cc: i2c-GZX6beZjE8VD60Wz+7aTrA

Hi,

On Thu, Jul 24, 2008 at 3:52 PM,  <fuhz-GANU6spQydw@public.gmane.org> wrote:
> So, I added the register_board_info in my board init function.
> I fill the i2c_board_info structure with the macro I2C_BOARD_INFO.
> I define a few clients.

hmm... ok

>
> And so what ?
>
> The system is supposed to call the probe(client) of the driver ?

yes, if you have the proper struct i2c_driver and struct i2c_device_id in
your driver the i2c subsystem should call the probe of your device.

check drivers/i2c/chips/menelaus.c for an example.

See how I2C_BOARD_INFO() in arch/arm/mach-omap2/board-h4
and struct i2c_device_id have the same name for the device (menelaus).

> I am really lost. I did not anderstand how to get a valid client instance.
> I suppose the I2C layer says "Hey boy, you have a new client !", but when ?

no, i2c layer will call device probe based on the driver name being the same in
i2c_board_info and i2c_device_id (if I'm not wrong that's the match,
Jean correct
me if I'm wrong).

> What about 'static unsigned short probe[2] = { I2C_CLIENT_END, I2C_CLIENT_END
> };'.
> Can it help me ?

That's old style i2c driver. You don't need that anymore ;-)

-- 
Best Regards,

Felipe Balbi
felipebalbi-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: New Style I2C Driver : how to get clients ?
       [not found]     ` <31e679430807240616n4bed86c7sa5c5ce69e066d0b5-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2008-07-24 14:26       ` fuhz-GANU6spQydw
       [not found]         ` <1216909598.4888911eb6cea-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
  0 siblings, 1 reply; 16+ messages in thread
From: fuhz-GANU6spQydw @ 2008-07-24 14:26 UTC (permalink / raw)
  To: i2c-GZX6beZjE8VD60Wz+7aTrA

Hi,

Thank you so much for help.


> yes, if you have the proper struct i2c_driver and struct i2c_device_id in
> your driver the i2c subsystem should call the probe of your device.
>
> check drivers/i2c/chips/menelaus.c for an example.
>
> See how I2C_BOARD_INFO() in arch/arm/mach-omap2/board-h4
> and struct i2c_device_id have the same name for the device (menelaus).

I am not using the last snapshot of Linux, but the 2.6.23 release.
My source code is not completly up-to-date.

For example there is no reference of I2C_BOARD_INFO in board-h4.
I have no 'i2c_device_id menelaus_id[]' in the i2c drivers code.

Perhap's that's why I am quite confuse, I am refering to recent code examples
and I am using not-so-recent Linux version.


In the documentation, "New-style" drivers are presented very quickly.
In fact, I still don't know where must be located the valid client list:
- in the board init source code with I2C_BOARD_INFO() macro
- in the i2c driver source code


> no, i2c layer will call device probe based on the driver name being the same
> in
> i2c_board_info and i2c_device_id (if I'm not wrong that's the match,
> Jean correct
> me if I'm wrong).
>

With my Linux version, i2c_device_id list was not present in the i2c_driver
structure. So i2c_board_info is supposed to match with what ?


> That's old style i2c driver. You don't need that anymore ;-)

Cool :)
Lines removed !



Best regards,

Légion.

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: New Style I2C Driver : how to get clients ?
       [not found]         ` <1216909598.4888911eb6cea-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
@ 2008-07-24 16:11           ` fuhz-GANU6spQydw
       [not found]             ` <1216915913.4888a9c91fc42-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
  2008-07-24 18:23           ` Felipe Balbi
  2008-07-24 18:26           ` Felipe Balbi
  2 siblings, 1 reply; 16+ messages in thread
From: fuhz-GANU6spQydw @ 2008-07-24 16:11 UTC (permalink / raw)
  To: i2c-GZX6beZjE8VD60Wz+7aTrA

Hi,

Ok, I think I have anderstand the process.
It is not as mystic that I thaught.

Tell me if I am wrong.


This is the process :

- Board init step #1
- I2C bus platform_driver initialisation

- Board init step #2 (register hardware i2c busses to the platform_driver)
- The I2C bus platform_driver register the new adapters to I2C layer

- Board init step #3 (register hardware devices present on each I2C bus)
- The I2C layer performs compatibity checks and tell I2C bus driver to add
clients

=> The probe callback function of the i2c driver is called.


Am I right ?


Thanks for help.


Best regards,

Légion.

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: New Style I2C Driver : how to get clients ?
       [not found]         ` <1216909598.4888911eb6cea-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
  2008-07-24 16:11           ` fuhz-GANU6spQydw
@ 2008-07-24 18:23           ` Felipe Balbi
  2008-07-24 18:26           ` Felipe Balbi
  2 siblings, 0 replies; 16+ messages in thread
From: Felipe Balbi @ 2008-07-24 18:23 UTC (permalink / raw)
  To: fuhz-GANU6spQydw; +Cc: i2c-GZX6beZjE8VD60Wz+7aTrA

Hi,

On Thu, Jul 24, 2008 at 5:26 PM,  <fuhz-GANU6spQydw@public.gmane.org> wrote:
> Hi,
>
> Thank you so much for help.
>
>
>> yes, if you have the proper struct i2c_driver and struct i2c_device_id in
>> your driver the i2c subsystem should call the probe of your device.
>>
>> check drivers/i2c/chips/menelaus.c for an example.
>>
>> See how I2C_BOARD_INFO() in arch/arm/mach-omap2/board-h4
>> and struct i2c_device_id have the same name for the device (menelaus).
>
> I am not using the last snapshot of Linux, but the 2.6.23 release.
> My source code is not completly up-to-date.
>
> For example there is no reference of I2C_BOARD_INFO in board-h4.
> I have no 'i2c_device_id menelaus_id[]' in the i2c drivers code.
>
> Perhap's that's why I am quite confuse, I am refering to recent code examples
> and I am using not-so-recent Linux version.

might be. Why are you using 2.6.23 and not 2.6.26 ?

Anyways, in 2.6.23 there was no i2c_device_id, so you can drop that comment.

But if you have to give the same name in the driver and in the i2c_board_info().

something like:

struct i2c_board_info *info[] =
{


>
>
> In the documentation, "New-style" drivers are presented very quickly.
> In fact, I still don't know where must be located the valid client list:
> - in the board init source code with I2C_BOARD_INFO() macro
> - in the i2c driver source code
>
>
>> no, i2c layer will call device probe based on the driver name being the same
>> in
>> i2c_board_info and i2c_device_id (if I'm not wrong that's the match,
>> Jean correct
>> me if I'm wrong).
>>
>
> With my Linux version, i2c_device_id list was not present in the i2c_driver
> structure. So i2c_board_info is supposed to match with what ?
>
>
>> That's old style i2c driver. You don't need that anymore ;-)
>
> Cool :)
> Lines removed !
>
>
>
> Best regards,
>
> Légion.
>
> _______________________________________________
> i2c mailing list
> i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
> http://lists.lm-sensors.org/mailman/listinfo/i2c
>



-- 
Best Regards,

Felipe Balbi
felipebalbi-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: New Style I2C Driver : how to get clients ?
       [not found]         ` <1216909598.4888911eb6cea-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
  2008-07-24 16:11           ` fuhz-GANU6spQydw
  2008-07-24 18:23           ` Felipe Balbi
@ 2008-07-24 18:26           ` Felipe Balbi
       [not found]             ` <31e679430807241126l5bcea400ieafcfa082d11783a-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  2 siblings, 1 reply; 16+ messages in thread
From: Felipe Balbi @ 2008-07-24 18:26 UTC (permalink / raw)
  To: fuhz-GANU6spQydw; +Cc: i2c-GZX6beZjE8VD60Wz+7aTrA

Hi,

sorry pressed the send button by mistake.

read below

On Thu, Jul 24, 2008 at 5:26 PM,  <fuhz-GANU6spQydw@public.gmane.org> wrote:
> I am not using the last snapshot of Linux, but the 2.6.23 release.
> My source code is not completly up-to-date.
>
> For example there is no reference of I2C_BOARD_INFO in board-h4.
> I have no 'i2c_device_id menelaus_id[]' in the i2c drivers code.
>
> Perhap's that's why I am quite confuse, I am refering to recent code examples
> and I am using not-so-recent Linux version.

might be. Why are you using 2.6.23 and not 2.6.26 ?

Anyways, in 2.6.23 there was no i2c_device_id, so you can drop that comment.

But if you have to give the same name in the driver and in the i2c_board_info().

something like:

board file:

struct i2c_board_info *info[] =
{
   {
     I2C_BOARD_INFO("mydevice", 0xff),
   },
};

(...)

driver:
struct i2c_driver mydriver = {
     .driver = {
          .name = "mydevice",
     },
     .probe = myprobe,
     .remove = __exit_p(myremove),
};

got it ??

-- 
Best Regards,

Felipe Balbi
felipebalbi-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: New Style I2C Driver : how to get clients ?
       [not found]             ` <1216915913.4888a9c91fc42-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
@ 2008-07-24 18:28               ` Felipe Balbi
  0 siblings, 0 replies; 16+ messages in thread
From: Felipe Balbi @ 2008-07-24 18:28 UTC (permalink / raw)
  To: fuhz-GANU6spQydw; +Cc: i2c-GZX6beZjE8VD60Wz+7aTrA

Hi,

On Thu, Jul 24, 2008 at 7:11 PM,  <fuhz-GANU6spQydw@public.gmane.org> wrote:
> - Board init step #1
> - I2C bus platform_driver initialisation
>
> - Board init step #2 (register hardware i2c busses to the platform_driver)
> - The I2C bus platform_driver register the new adapters to I2C layer
>
> - Board init step #3 (register hardware devices present on each I2C bus)

are you writing a client driver or a bus driver ?

-- 
Best Regards,

Felipe Balbi
felipebalbi-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: New Style I2C Driver : how to get clients ?
       [not found]             ` <31e679430807241126l5bcea400ieafcfa082d11783a-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2008-07-25  9:00               ` fuhz-GANU6spQydw
       [not found]                 ` <1216976458.4889964a5d9e2-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
  0 siblings, 1 reply; 16+ messages in thread
From: fuhz-GANU6spQydw @ 2008-07-25  9:00 UTC (permalink / raw)
  To: i2c-GZX6beZjE8VD60Wz+7aTrA

Hi,

> are you writing a client driver or a bus driver ?

In fact, I just want to write a client driver for a embedded board.
But, the bus driver is not already ported, so I wrote an algorithm and
an adapter. I am currently write the client driver, but no client is
coming.


> might be. Why are you using 2.6.23 and not 2.6.26 ?

I want to use the 2.6.23 release because I have already a patched and
customized Linux directory tree, I don't want to merge it with new version of
kernel.


> But if you have to give the same name in the driver and in the
> i2c_board_info().

Ok, I have this now.


> got it ??

Not really. Thanks to you, I anderstand more about i2c layer.
But now, I think my problem is the bus driver.

I have this error :
"I2C adapter driver : forgot to specify physical device"

I don't anderstand where we are supposed to associate an adapter
with the client driver.


Thanks for help.


Best regards,

Légion.

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: New Style I2C Driver : how to get clients ?
       [not found]                 ` <1216976458.4889964a5d9e2-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
@ 2008-07-25 14:08                   ` fuhz-GANU6spQydw
       [not found]                     ` <1216994898.4889de52becd3-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
  0 siblings, 1 reply; 16+ messages in thread
From: fuhz-GANU6spQydw @ 2008-07-25 14:08 UTC (permalink / raw)
  To: i2c-GZX6beZjE8VD60Wz+7aTrA

Hello,

Ok, I have just read my code carefully and correct some mistakes.
It is quite clean now, but I still don't get my clients.

In the board initialisation file, I define two things :
- a platform_device for my I2C bus
  The name field correspond to the adapter platform_driver.name
- a valid i2c_board_info struct defining my clients
  The name field correspond to the client i2c_driver.name
  I do not care about type field, I just use the I2C_BOARD_INFO macro

I have written different modules for the algorithm, the adapter, and the client.

First at all, I load the client driver with insmod utility.
Then, I load the algorithm.
And finally, I load the adapter.

When the adapter is loaded, my probe(platform_device) is correctly called.
I allocate a new structure correctly and register a new adapter.

On the remove callback function, I deallocate it.


No client is registred to my i2c_driver, so where is the mistake ?



> got it ??

As soon as possible :-)



Best regards,

Légion.

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: New Style I2C Driver : how to get clients ?
       [not found]                     ` <1216994898.4889de52becd3-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
@ 2008-07-25 14:26                       ` Felipe Balbi
       [not found]                         ` <31e679430807250726n3e4b189ehcff5dd02f46872f3-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  0 siblings, 1 reply; 16+ messages in thread
From: Felipe Balbi @ 2008-07-25 14:26 UTC (permalink / raw)
  To: fuhz-GANU6spQydw; +Cc: i2c-GZX6beZjE8VD60Wz+7aTrA

Hi,

On Fri, Jul 25, 2008 at 5:08 PM,  <fuhz-GANU6spQydw@public.gmane.org> wrote:

> First at all, I load the client driver with insmod utility.
> Then, I load the algorithm.
> And finally, I load the adapter.

should be the other way around. You first need a bus in order
to have clients.

-- 
Best Regards,

Felipe Balbi
felipebalbi-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: New Style I2C Driver : how to get clients ?
       [not found]                         ` <31e679430807250726n3e4b189ehcff5dd02f46872f3-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2008-07-25 14:30                           ` fuhz-GANU6spQydw
       [not found]                             ` <1216996221.4889e37d41fa3-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
  0 siblings, 1 reply; 16+ messages in thread
From: fuhz-GANU6spQydw @ 2008-07-25 14:30 UTC (permalink / raw)
  To: i2c-GZX6beZjE8VD60Wz+7aTrA

Hi,

> should be the other way around. You first need a bus in order
> to have clients.

Ok, so I unload all the modules.

First, I load the algorithm.
Second, I load the adapter.
And finally I load the client driver.

There isn't any improvement.

Any other ideas ?



Best regards,

Légion.


_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: New Style I2C Driver : how to get clients ?
       [not found]                             ` <1216996221.4889e37d41fa3-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
@ 2008-07-28  9:36                               ` fuhz-GANU6spQydw
       [not found]                                 ` <1217237786.488d931ac5b9b-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
  0 siblings, 1 reply; 16+ messages in thread
From: fuhz-GANU6spQydw @ 2008-07-28  9:36 UTC (permalink / raw)
  To: i2c-GZX6beZjE8VD60Wz+7aTrA

Hi,

In order to improve my understanding of Linux i2c layer, I read the source code.
I read i2c-core.c and I try to anderstand why my clients wasn't created.

The problem is in the i2c_register_adapter function :

/* create pre-declarated device nodes for new-style drivers */
if (adap->nr < __i2c_first_dynamic_bus_num)
  i2c_scan_static_board_info(adap);

The test is NEVER true. So my clients are not created.



I read that __i2c_first_dynamic_bus_num is set to 1.
It does not seems to change.

And that adap->nr refers to "Dynamic Bus Number".
My first bus register with adap->nr=1.
The second register with adap->nr=2.

That's why the test fails.


So, I have had an idea to fix the problem.

I change :
i2c_add_adapter(adap);

with
adap->nr = 0;
i2c_add_numbered_adapter(adap);


But, it make new problems :
- I can't manage two busses
- I definitly don't anderstand how I2C_BOARD_INFO macro can associate
  a client to a specified bus
- I don't anderstand what I am writing, and I really dislike it :c


So many questions :)

Thanks for help.


Best regards,

Légion.

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: New Style I2C Driver : how to get clients ?
       [not found]                                 ` <1217237786.488d931ac5b9b-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
@ 2008-07-28  9:59                                   ` Felipe Balbi
       [not found]                                     ` <1217239920.488d9b70baec7@imp.free.fr>
  0 siblings, 1 reply; 16+ messages in thread
From: Felipe Balbi @ 2008-07-28  9:59 UTC (permalink / raw)
  To: fuhz-GANU6spQydw; +Cc: i2c-GZX6beZjE8VD60Wz+7aTrA

Hi,

On Mon, Jul 28, 2008 at 12:36 PM,  <fuhz-GANU6spQydw@public.gmane.org> wrote:
> Hi,
>
> In order to improve my understanding of Linux i2c layer, I read the source code.
> I read i2c-core.c and I try to anderstand why my clients wasn't created.
>
> The problem is in the i2c_register_adapter function :
>
> /* create pre-declarated device nodes for new-style drivers */
> if (adap->nr < __i2c_first_dynamic_bus_num)
>  i2c_scan_static_board_info(adap);
>
> The test is NEVER true. So my clients are not created.
>
>
>
> I read that __i2c_first_dynamic_bus_num is set to 1.
> It does not seems to change.

it changes in i2c-boardinfo.c@i2c_register_board_info:

	/* dynamic bus numbers will be assigned after the last static one */
	if (busnum >= __i2c_first_dynamic_bus_num)
		__i2c_first_dynamic_bus_num = busnum + 1;

which would make the above if() true :-)

> And that adap->nr refers to "Dynamic Bus Number".
> My first bus register with adap->nr=1.
> The second register with adap->nr=2.

hmm.. i suppose your calling i2c_register_board_info() with wrong
parameters.

> That's why the test fails.
>
>
> So, I have had an idea to fix the problem.
>
> I change :
> i2c_add_adapter(adap);
>
> with
> adap->nr = 0;
> i2c_add_numbered_adapter(adap);
>
>
> But, it make new problems :
> - I can't manage two busses
> - I definitly don't anderstand how I2C_BOARD_INFO macro can associate
>  a client to a specified bus
> - I don't anderstand what I am writing, and I really dislike it :c

show me your i2c_register_board_info() call.

it should be:

i2c_register_board_info(bus number, struct i2c_board_info **,
             ARRAY_SIZE(i2c_board_info));

just a note, the first i2c bus is bus 1 and not bus 0. I suppose
that's not your problem, right ?

-- 
Best Regards,

Felipe Balbi
felipebalbi-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: New Style I2C Driver : how to get clients ?
       [not found]                                       ` <1217239920.488d9b70baec7-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
@ 2008-07-28 10:35                                         ` Felipe Balbi
  0 siblings, 0 replies; 16+ messages in thread
From: Felipe Balbi @ 2008-07-28 10:35 UTC (permalink / raw)
  To: fuhz-GANU6spQydw; +Cc: Linux I2C

Hi,

On Mon, Jul 28, 2008 at 1:12 PM,  <fuhz-GANU6spQydw@public.gmane.org> wrote:
> Hi,
>
>> > I read that __i2c_first_dynamic_bus_num is set to 1.
>> > It does not seems to change.
>>
>> it changes in i2c-boardinfo.c@i2c_register_board_info:
>>
>>       /* dynamic bus numbers will be assigned after the last static one */
>>       if (busnum >= __i2c_first_dynamic_bus_num)
>>               __i2c_first_dynamic_bus_num = busnum + 1;
>>
>> which would make the above if() true :-)
>
> You're right !
>
>
>> hmm.. i suppose your calling i2c_register_board_info() with wrong
>> parameters.
>
>> just a note, the first i2c bus is bus 1 and not bus 0. I suppose
>> that's not your problem, right ?
>
> It was :D
> I thought it was zero-based counter...and I tested the code with only one bus !
>
> Hehe, I feel stupid :D
>
>
>
> MANY MANY MANY THANKS :D

Cool. At least it's solved :-)

Have fun now ;-)

-- 
Best Regards,

Felipe Balbi
felipebalbi-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2008-07-28 10:35 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-24 12:52 New Style I2C Driver : how to get clients ? fuhz-GANU6spQydw
     [not found] ` <1216903949.48887b0dd2039-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
2008-07-24 13:16   ` Felipe Balbi
     [not found]     ` <31e679430807240616n4bed86c7sa5c5ce69e066d0b5-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-07-24 14:26       ` fuhz-GANU6spQydw
     [not found]         ` <1216909598.4888911eb6cea-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
2008-07-24 16:11           ` fuhz-GANU6spQydw
     [not found]             ` <1216915913.4888a9c91fc42-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
2008-07-24 18:28               ` Felipe Balbi
2008-07-24 18:23           ` Felipe Balbi
2008-07-24 18:26           ` Felipe Balbi
     [not found]             ` <31e679430807241126l5bcea400ieafcfa082d11783a-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-07-25  9:00               ` fuhz-GANU6spQydw
     [not found]                 ` <1216976458.4889964a5d9e2-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
2008-07-25 14:08                   ` fuhz-GANU6spQydw
     [not found]                     ` <1216994898.4889de52becd3-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
2008-07-25 14:26                       ` Felipe Balbi
     [not found]                         ` <31e679430807250726n3e4b189ehcff5dd02f46872f3-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-07-25 14:30                           ` fuhz-GANU6spQydw
     [not found]                             ` <1216996221.4889e37d41fa3-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
2008-07-28  9:36                               ` fuhz-GANU6spQydw
     [not found]                                 ` <1217237786.488d931ac5b9b-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
2008-07-28  9:59                                   ` Felipe Balbi
     [not found]                                     ` <1217239920.488d9b70baec7@imp.free.fr>
     [not found]                                       ` <1217239920.488d9b70baec7-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
2008-07-28 10:35                                         ` Felipe Balbi
  -- strict thread matches above, loose matches on Subject: below --
2008-07-24  9:07 fuhz-GANU6spQydw
     [not found] ` <1216890432.48884640c4486-HZaT1/I6gcdWj0EZb7rXcA@public.gmane.org>
2008-07-24  9:29   ` Felipe Balbi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox