On 03/09/2024 17:17, Liao, Bard wrote:
then dpn_prop[0].num = 1 and dpn_prop[1].num = 3. And we need to go
throuth dpn_prop[0] and dpn_prop[1] instead of dpn_prop[1] and
dpn_prop[3].
What are the source or sink ports in your case? Maybe you just generate wrong mask?
I checked my mask is 0xa when I do aplay and it matches the sink_ports of the rt722 codec.
It's not only my patch which uses for_each_set_bit(). sysfs_slave_dpn does the same.
What sysfs_slave_dpn does is i = 0; for_each_set_bit(bit, &mask, 32) { if (bit == N) { return sprintf(buf, format_string, dpn[i].field); } i++; } It uses a variable "i" to represent the array index of dpn[i]. But, it is for_each_set_bit(i, &mask, 32) in your patch and the variable "i" which represents each bit of the mask is used as the index of dpn_prop[i].
Again, the point is that the bits of mask is not the index of the dpn_prop[] array.
Yes, you are right. I think I cannot achieve my initial goal of using same dpn array with different indices. My patch should be reverted, I believe.
I'll send a revert, sorry for the mess.
Best regards, Krzysztof