コード例 #1
0
ファイル: max8925-i2c.c プロジェクト: CSCLOG/beaglebone
static int __devinit max8925_probe(struct i2c_client *client,
				   const struct i2c_device_id *id)
{
	struct max8925_platform_data *pdata = client->dev.platform_data;
	static struct max8925_chip *chip;

	if (!pdata) {
		pr_info("%s: platform data is missing\n", __func__);
		return -EINVAL;
	}

	chip = kzalloc(sizeof(struct max8925_chip), GFP_KERNEL);
	if (chip == NULL)
		return -ENOMEM;
	chip->i2c = client;
	chip->dev = &client->dev;
	i2c_set_clientdata(client, chip);
	dev_set_drvdata(chip->dev, chip);
	mutex_init(&chip->io_lock);

	chip->rtc = i2c_new_dummy(chip->i2c->adapter, RTC_I2C_ADDR);
	i2c_set_clientdata(chip->rtc, chip);

	chip->adc = i2c_new_dummy(chip->i2c->adapter, ADC_I2C_ADDR);
	i2c_set_clientdata(chip->adc, chip);

	max8925_device_init(chip, pdata);

	return 0;
}
コード例 #2
0
static int max8925_probe(struct i2c_client *client,
                         const struct i2c_device_id *id)
{
    struct max8925_platform_data *pdata = dev_get_platdata(&client->dev);
    static struct max8925_chip *chip;
    struct device_node *node = client->dev.of_node;

    if (node && !pdata) {
        /* parse DT to get platform data */
        pdata = devm_kzalloc(&client->dev,
                             sizeof(struct max8925_platform_data),
                             GFP_KERNEL);
        if (!pdata)
            return -ENOMEM;

        if (max8925_dt_init(node, &client->dev, pdata))
            return -EINVAL;
    } else if (!pdata) {
        pr_info("%s: platform data is missing\n", __func__);
        return -EINVAL;
    }

    chip = devm_kzalloc(&client->dev,
                        sizeof(struct max8925_chip), GFP_KERNEL);
    if (chip == NULL)
        return -ENOMEM;
    chip->i2c = client;
    chip->dev = &client->dev;
    i2c_set_clientdata(client, chip);
    dev_set_drvdata(chip->dev, chip);
    mutex_init(&chip->io_lock);

    chip->rtc = i2c_new_dummy(chip->i2c->adapter, RTC_I2C_ADDR);
    i2c_set_clientdata(chip->rtc, chip);

    chip->adc = i2c_new_dummy(chip->i2c->adapter, ADC_I2C_ADDR);
    i2c_set_clientdata(chip->adc, chip);

    device_init_wakeup(&client->dev, 1);

    max8925_device_init(chip, pdata);

    return 0;
}