Lines Matching +full:otp +full:- +full:2

1 // SPDX-License-Identifier: GPL-2.0
19 #include "atmel-i2c.h"
24 struct atmel_i2c_client_priv *i2c_priv = work_data->ctx; in atmel_sha204a_rng_done()
28 dev_warn_ratelimited(&i2c_priv->client->dev, in atmel_sha204a_rng_done()
32 rng->priv = (unsigned long)work_data; in atmel_sha204a_rng_done()
33 atomic_dec(&i2c_priv->tfm_count); in atmel_sha204a_rng_done()
45 if (!atomic_add_unless(&i2c_priv->tfm_count, 1, 1)) in atmel_sha204a_rng_read_nonblocking()
48 if (rng->priv) { in atmel_sha204a_rng_read_nonblocking()
49 work_data = (struct atmel_i2c_work_data *)rng->priv; in atmel_sha204a_rng_read_nonblocking()
50 max = min(sizeof(work_data->cmd.data), max); in atmel_sha204a_rng_read_nonblocking()
51 memcpy(data, &work_data->cmd.data, max); in atmel_sha204a_rng_read_nonblocking()
52 rng->priv = 0; in atmel_sha204a_rng_read_nonblocking()
56 return -ENOMEM; in atmel_sha204a_rng_read_nonblocking()
58 work_data->ctx = i2c_priv; in atmel_sha204a_rng_read_nonblocking()
59 work_data->client = i2c_priv->client; in atmel_sha204a_rng_read_nonblocking()
64 atmel_i2c_init_random_cmd(&work_data->cmd); in atmel_sha204a_rng_read_nonblocking()
84 ret = atmel_i2c_send_receive(i2c_priv->client, &cmd); in atmel_sha204a_rng_read()
94 static int atmel_sha204a_otp_read(struct i2c_client *client, u16 addr, u8 *otp) in atmel_sha204a_otp_read() argument
97 int ret = -1; in atmel_sha204a_otp_read()
100 dev_err(&client->dev, "failed, invalid otp address %04X\n", in atmel_sha204a_otp_read()
108 dev_err(&client->dev, "failed, device not ready\n"); in atmel_sha204a_otp_read()
109 return -EINVAL; in atmel_sha204a_otp_read()
112 memcpy(otp, cmd.data+1, 4); in atmel_sha204a_otp_read()
121 u8 otp[OTP_ZONE_SIZE]; in otp_show() local
127 if (atmel_sha204a_otp_read(client, addr, otp + addr * 4) < 0) { in otp_show()
128 dev_err(dev, "failed to read otp zone\n"); in otp_show()
133 for (i = 0; i < addr*2; i++) in otp_show()
134 str += sprintf(str, "%02X", otp[i]); in otp_show()
136 return str - buf; in otp_show()
138 static DEVICE_ATTR_RO(otp);
161 memset(&i2c_priv->hwrng, 0, sizeof(i2c_priv->hwrng)); in atmel_sha204a_probe()
163 i2c_priv->hwrng.name = dev_name(&client->dev); in atmel_sha204a_probe()
164 i2c_priv->hwrng.read = atmel_sha204a_rng_read; in atmel_sha204a_probe()
166 ret = devm_hwrng_register(&client->dev, &i2c_priv->hwrng); in atmel_sha204a_probe()
168 dev_warn(&client->dev, "failed to register RNG (%d)\n", ret); in atmel_sha204a_probe()
170 /* otp read out */ in atmel_sha204a_probe()
171 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) in atmel_sha204a_probe()
172 return -ENODEV; in atmel_sha204a_probe()
174 ret = sysfs_create_group(&client->dev.kobj, &atmel_sha204a_groups); in atmel_sha204a_probe()
176 dev_err(&client->dev, "failed to register sysfs entry\n"); in atmel_sha204a_probe()
187 if (atomic_read(&i2c_priv->tfm_count)) { in atmel_sha204a_remove()
188 dev_emerg(&client->dev, "Device is busy, will remove it anyhow\n"); in atmel_sha204a_remove()
192 sysfs_remove_group(&client->dev.kobj, &atmel_sha204a_groups); in atmel_sha204a_remove()
194 kfree((void *)i2c_priv->hwrng.priv); in atmel_sha204a_remove()
216 .driver.name = "atmel-sha204a",