Hi Darius,

On Tue, 13 May 2008 14:29:03 +0300, Darius wrote:
> I attach simplified i2c code part from my driver above:
> 
> ---------------------------------------------------------------------------------------------------------
> 
> struct ov7670 {
>       struct i2c_client *client;
> };
> 
> static int ov7670_probe(struct i2c_client *client, const struct 
> i2c_device_id *did)
> {
>       struct ov7670 *ov7670;
>       struct i2c_adapter *adapter =to_i2c_adapter(client->dev.parent);
>       int ret;
> 
>       printk ("OV7670: error1\n");
> 
>       if (!i2c_check_functionality(adapter,I2C_FUNC_SMBUS_WORD_DATA)){
>               return -EIO;
>       }
>       
>       ov7670 = kzalloc(sizeof(struct ov7670), GFP_KERNEL);
>       if (!ov7670)
>               return -ENOMEM;
>       ov7670->client = client;
>       i2c_set_clientdata(client, ov7670);
>       return 0;
> }
> 
> static int ov7670_remove(struct i2c_client *client)
> {
>       struct ov7670 *ov7670 = i2c_get_clientdata(client);
>       struct i2c_adapter *adapter =to_i2c_adapter(client->dev.parent);
>       kfree(ov7670);
>       return 0;
> }
> 
> static const struct i2c_device_id ov7670_id[] = {
>       { "ov7670", 0 },
>       { }
> };
> MODULE_DEVICE_TABLE(i2c, ov7670_id);
> 
> static struct i2c_driver ov7670_i2c_driver = {
>       .driver =       
>                       {
>                               .name = "ov7670",
>                       },
>       .probe          = ov7670_probe,
>       .remove         = ov7670_remove,
>       .id_table       = ov7670_id,
> };
> 
> static int __init ov7670_init(void)
> {
>       printk ("OV7670: driver init\n");
>       return i2c_add_driver(&ov7670_i2c_driver);
> }
> 
> static void __exit ov7670_exit(void)
> {
>       printk ("OV7670: driver exit\n");       
>       i2c_del_driver(&ov7670_i2c_driver);
> }
> 
> module_init(ov7670_init);
> module_exit(ov7670_exit);
> 
> 
> -------------------------------------------------------------------------------------------
> 
> And piece from board init:
> 
> ------------------------------------------------------------------------------------------
> 
> static struct i2c_board_info __initdata mx1ads_i2c_devices[] = {
>       {
>               I2C_BOARD_INFO("ov7670", 0x42),
>       }
> };
> 
> <...>
> i2c_register_board_info(0,mx1ads_i2c_devices,ARRAY_SIZE(mx1ads_i2c_devices));
> <...>

This code looks OK to me. But which driver handles i2c bus 0? Does your
platform code create i2c bus 0? i2c-code will instantiate the ov7670
i2c device when i2c bus 0 is created by i2c_add_numbered_adapter(). So
if you don't see it created, I suspect that i2c bus 0 itself is never
registered.

-- 
Jean Delvare

_______________________________________________
i2c mailing list
[email protected]
http://lists.lm-sensors.org/mailman/listinfo/i2c

Reply via email to