On Tue, 2010-12-21 at 15:20 +0800, [email protected] wrote:
> Add detect function and ami304 support.
> 
> Sign-off-by: Gram Hsieh <[email protected]>
> Sign-off-by: Major Lee <[email protected]>
> ---
>  Kconfig  |    4 ++--
>  ak8974.c |   22 ++++++++++++++++++++++
>  2 files changed, 24 insertions(+), 2 deletions(-)
> 
> diff -pruN a/drivers/staging/mfld-sensors/ak8974.c
> b/drivers/staging/mfld-sensors/ak8974.c
> --- a/drivers/staging/mfld-sensors/ak8974.c   2010-11-23
> 13:40:51.260749000 +0800
> +++ b/drivers/staging/mfld-sensors/ak8974.c   2010-12-16
> 17:13:30.117382000 +0800
> @@ -166,6 +166,26 @@ compass_error1:
>       return res;
>  }
>  
> +static int ak8974_detect(struct i2c_client *client,
> +                     struct i2c_board_info *info)
> +{
> +     u8 device_id;
> +
> +     /* Check device ID (WIA register) */
> +     device_id = i2c_smbus_read_byte_data(client, DEVICE_ID);
> +     switch (device_id) {
> +             case 0x47:
> +                     strlcpy(info->type, "ami304", I2C_NAME_SIZE);
> +                     break;
> +             case 0x48:
> +                     strlcpy(info->type, "ak8974", I2C_NAME_SIZE);
> +                     break;
> +             default:
> +                     return -ENODEV;
> +     }
> +     return 0;
> +}
> +

First, I think you need to define address_list in i2c_driver. Otherwise,
i2c core will not do auto detection if address_list is not defined.

And we provide i2c_board_info on Medfield to create i2c_device, if both
auto detection and static i2c_board_info are provided, i2c core will use
static i2c_board_info to create device.

I am not sure why we need auto detection for ak8974?

Thanks,
Hong

>  static int __devexit ak8974_remove(struct i2c_client *client)
>  {
>       struct compass_data *data = i2c_get_clientdata(client);
> @@ -219,6 +239,7 @@ static const struct dev_pm_ops ak8974_pm
>  
>  static struct i2c_device_id ak8974_id[] = {
>       { "ak8974", 0 },
> +     { "ami304", 0 },
>       { }
>  };
>  
> @@ -228,6 +249,7 @@ static struct i2c_driver ak8974_driver =
>               .pm = &ak8974_pm_ops,
>       },
>       .probe = ak8974_probe,
> +     .detect = ak8974_detect,
>       .remove = __devexit_p(ak8974_remove),
>       .suspend = ak8974_suspend,
>       .resume = ak8974_resume,
> diff -pruN a/drivers/staging/mfld-sensors/Kconfig
> b/drivers/staging/mfld-sensors/Kconfig
> --- a/drivers/staging/mfld-sensors/Kconfig    2010-11-23
> 13:40:50.118248000 +0800
> +++ b/drivers/staging/mfld-sensors/Kconfig    2010-12-16
> 17:08:30.079650000 +0800
> @@ -10,10 +10,10 @@ menuconfig MFLD_SENSORS
>  
>  if MFLD_SENSORS
>  config SENSORS_AK8974COMPASS
> -     tristate "Ak8974 Compass Module"
> +     tristate "Ak8974/AMI304 Compass Module"
>       depends on I2C
>       help
> -       To get Compass Sensor output from AK8974 sensor.
> +       To get Compass Sensor output from AK8974/AMI304 sensor.
>  
>  config SENSORS_APDS9802PSPROXIMITY
>          tristate "Medfield Avago APDS9802 Proximity Sensor Module"
> _______________________________________________
> MeeGo-kernel mailing list
> [email protected]
> http://lists.meego.com/listinfo/meego-kernel


_______________________________________________
MeeGo-kernel mailing list
[email protected]
http://lists.meego.com/listinfo/meego-kernel

Reply via email to