I just lowered the clock-frequency to 50 kHz and I face the same problem, but it very much depends on the hardware. On some devices I don't face the problem at all and on others I can reproduce it very reliable. If I add a mdelay(20), or use the loop I postet earlier, the issue is gone on all devices.
Are there any other devices on the I2C bus? Lets take this off the ALSA list until there is a determination that it is an ASoC issue which it does not appear to be right now.
Well I think it is. There is a delay needed in sound/soc/codec/cs4271.c at line 569, in certain cases, because the call to regmap_update_bits on line 570 fails sometimes. If I add a delay of a few us on line 569, the call never fails.
But let me just send in a patch so we really know what we are talking about, then.
can you try something like this?
gpio_direction_output(cs4271->gpio_nreset, 0); -udelay(1); gpio_set_value(cs4271->gpio_nreset, 1); /* Give the codec time to wake up */ -udelay(1);
gpio_direction_output(cs4271->gpio_nreset, 0); +mdelay(1); gpio_set_value(cs4271->gpio_nreset, 1); /* Give the codec time to wake up */ +mdelay(1);
See if that helps instead of adding another delay.