예제 #1
0
static int mma845x_mod_probe(struct i2c_client *client,
			   const struct i2c_device_id *devid)
{
	struct ext_slave_platform_data *pdata;
	struct mma845x_mod_private_data *private_data;
	int result = 0;
	unsigned char product_id = 0xff; 

	dev_info(&client->adapter->dev, "%s: %s\n", __func__, devid->name);

	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
		result = -ENODEV;
		goto out_no_free;
	}

	pdata = client->dev.platform_data;
	if (!pdata) {
		dev_err(&client->adapter->dev,
			"Missing platform data for slave %s\n", devid->name);
		result = -EFAULT;
		goto out_no_free;
	}
	result = inv_serial_read(client->adapter, pdata->address,
				 ACCEL_MMA845X_WHO_AM_I, sizeof(product_id),
				 &product_id);
	printk("mma845x detect 0x%x\n", product_id);
	if (result || (product_id != ACCEL_MMA845X_ID)) {
		dev_err(&client->adapter->dev, "mma845x not found\n");
		result = -ENODEV;
		goto out_no_free;
	}
	printk("mma845x find\n");

	private_data = kzalloc(sizeof(*private_data), GFP_KERNEL);
	if (!private_data) {
		result = -ENOMEM;
		goto out_no_free;
	}

	i2c_set_clientdata(client, private_data);
	private_data->client = client;
	private_data->pdata = pdata;

	result = inv_mpu_register_slave(THIS_MODULE, client, pdata,
					mma845x_get_slave_descr);
	if (result) {
		dev_err(&client->adapter->dev,
			"Slave registration failed: %s, %d\n",
			devid->name, result);
		goto out_free_memory;
	}

	return result;

out_free_memory:
	kfree(private_data);
out_no_free:
	dev_err(&client->adapter->dev, "%s failed %d\n", __func__, result);
	return result;

}
예제 #2
0
static int kxtf9_mod_probe(struct i2c_client *client,
			   const struct i2c_device_id *devid)
{
	struct ext_slave_platform_data *pdata;
	struct kxtf9_mod_private_data *private_data;
	int result = 0;
	unsigned char product_id = 0xff; //[ECID:000000] ZTEBSP wanghaifei 20120220, add for id detect

	dev_info(&client->adapter->dev, "%s: %s\n", __func__, devid->name);

	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
		result = -ENODEV;
		goto out_no_free;
	}

	pdata = client->dev.platform_data;
	if (!pdata) {
		dev_err(&client->adapter->dev,
			"Missing platform data for slave %s\n", devid->name);
		result = -EFAULT;
		goto out_no_free;
	}

//[ECID:000000] ZTEBSP wanghaifei start 20120220, determine whether this driver shold be installed
        result = inv_serial_read(client->adapter, pdata->address,
                                 ACCEL_KXTF9_WHO_AM_I, sizeof(product_id),
                                 &product_id);
        printk("kxtf9 detect 0x%x\n", product_id);
        if (result || (product_id != ACCEL_KXTF9_ID)) {
                dev_err(&client->adapter->dev, "kxtf9 not found\n");
                result = -ENODEV;
                goto out_no_free;
        }
        printk("kxtf9 find\n");
//[ECID:000000] ZTEBSP wanghaifei end 20120220, determine whether this driver shold be installed

	private_data = kzalloc(sizeof(*private_data), GFP_KERNEL);
	if (!private_data) {
		result = -ENOMEM;
		goto out_no_free;
	}

	i2c_set_clientdata(client, private_data);
	private_data->client = client;
	private_data->pdata = pdata;

	result = inv_mpu_register_slave(THIS_MODULE, client, pdata,
					kxtf9_get_slave_descr);
	if (result) {
		dev_err(&client->adapter->dev,
			"Slave registration failed: %s, %d\n",
			devid->name, result);
		goto out_free_memory;
	}

	return result;

out_free_memory:
	kfree(private_data);
out_no_free:
	dev_err(&client->adapter->dev, "%s failed %d\n", __func__, result);
	return result;

}