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