static int tpm_tis_i2c_open(struct udevice *dev) { struct tpm_chip *chip = dev_get_priv(dev); int rc; debug("%s: start\n", __func__); if (chip->is_open) return -EBUSY; rc = tpm_tis_i2c_init(dev); if (rc < 0) chip->is_open = 0; return rc; }
static int __devinit tpm_tis_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id) { int rc; if (tpm_dev.client != NULL) return -EBUSY; /* We only support one client */ if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { dev_err(&client->dev, "no algorithms associated to the i2c bus\n"); return -ENODEV; } client->driver = &tpm_tis_i2c_driver; tpm_dev.client = client; rc = tpm_tis_i2c_init(&client->dev); if (rc != 0) { client->driver = NULL; tpm_dev.client = NULL; rc = -ENODEV; } return rc; }