> @@ -271,12 +273,25 @@ mv64xxx_i2c_do_action(struct mv64xxx_i2c_data *drv_data)
>  {
>       switch(drv_data->action) {
>       case MV64XXX_I2C_ACTION_SEND_RESTART:
> +             /* We should only get here if we have further messages */
> +             BUG_ON(drv_data->num_msgs == 0);
> +

...

> @@ -453,16 +463,20 @@ static int
>  mv64xxx_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
>  {
>       struct mv64xxx_i2c_data *drv_data = i2c_get_adapdata(adap);
> -     int     i, rc;
> +     int rc, ret = num;
>  
> -     for (i = 0; i < num; i++) {
> -             rc = mv64xxx_i2c_execute_msg(drv_data, &msgs[i],
> -                                             i == 0, i + 1 == num);
> -             if (rc < 0)
> -                     return rc;
> -     }
> +     BUG_ON(drv_data->msgs != NULL);

Can't we handle this more gracefully than to halt the kernel? Like
WARN_ON and resetting the controller or disabling the bus or...

--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to