¿Qué significa cuando i2c_smbus_read_byte () devuelve 0

0

i2c_smbus_read_byte () devuelve un valor negativo cuando hay un error en la lectura de datos. Pero, ¿y si devuelve 0?

A continuación se muestra el código del controlador adt7316-i2c

static int adt7316_i2c_read(void *client, u8 reg, u8 *data)
{
   struct i2c_client *cl = client;
   int ret;

   ret = i2c_smbus_write_byte(cl, reg);
   if (ret < 0) {
     dev_err(&cl->dev, "I2C fail to select reg\n");
     return ret;
   }

   ret = i2c_smbus_read_byte(client);
   if (ret < 0) {
      dev_err(&cl->dev, "I2C read error\n");
      return ret;
   }

   *data = ret;

   return 0;
}

Incluso si i2c_smbus_read_byte () devuelve 0 aquí, entonces el controlador será exitoso sonda. Por lo tanto, mi principal preocupación es saber si la retención de 0 de i2c_smbus_read_byte () es un caso válido o no para que un controlador la pruebe.

No estoy seguro, pero tal vez significa que no hay ningún error y tampoco se han leído datos. Si este es el caso, ¿en qué situación ocurre esto?

    
pregunta Shreeya Patel

1 respuesta

0

Como se explica en LKML, un valor de retorno de cero indica que este es el byte recibido del bus I2C. Es datos , no la longitud de los datos.

Lo que significa que se recibe 0 desde el chip , y si se supone que el chip está enviando un cero, es totalmente contextual, esencialmente dependiendo de la pregunta que se hizo.

Dado que el código que representa parece ser una función de transferencia que se usará para muchos propósitos, el código realmente no puede saber si 0 es o no es información válida, a menos que sepa a ciencia cierta que no hay situación legítima con este chip en el que cualquier acceso podría devolver datos de valor 0 ... lo que parece un poco improbable, ya que 0 es en realidad un valor extremadamente común para los registros de configuración o estado y especialmente en valores de múltiples bytes ...

    
respondido por el Chris Stratton

Lea otras preguntas en las etiquetas