
Dear Lei Wen,
In message AANLkTingSAd=sQH=QbmJjvOFjVbjsCbWH0SFFyKzVrs4@mail.gmail.com you wrote:
- You say that the current implementation, which uses a writeb() call
(i. e. a byte write operation) to this register would not only affect bits 0...7, as expected, but also clear bit 9.
That is not my case. In my case, for writeb, it would affect only bits0-7, but leave bit 8 untouched. However, I need the bit 8 to be set to be 0, which is 1 at the power on.
...
Yes, that is what I want. The bit8 set to 0.
Ah. But this is completely different thing, then.
Your code would only perform this operation by accident, and this is definitely wrong. Assume some other system where this bit needs to be set to 1 - then your code would corrupt the setting.
So I think:
1) The current NS16550 driver behaves correctly. It sets up the NS16550 compatible parts of your chip in the correct way, without messing with any non-standard bits.
2) If you have additional, non-standard bits in your device, you must initialize these separately. Eventually you provide a custom driver which just calls the standard NS16550 driver functions, except where you have additional need to manipulate the extra, non-standard bits of your device.
Best regards,
Wolfgang Denk