sim: bfin: fix clear/set/toggle GPIO handling
The clear/set/toggle MMRs aren't backed by "real" data; they implicitly perform bit operations on the associated data register. So when we go to process writes to them, we need to adjust the pointer accordingly so that the actual backing data is modified. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
ee196b8c2b
commit
eaf863cd1e
2 changed files with 11 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
2011-03-24 Mike Frysinger <vapier@gentoo.org>
|
||||
|
||||
* dv-bfin_gpio.c (bfin_gpio_io_write_buffer): Subtract 2 from the
|
||||
valuep pointer for clear MMRs, 4 for set MMRs, and 6 for toggle MMRs.
|
||||
|
||||
2011-03-23 Mike Frysinger <vapier@gentoo.org>
|
||||
|
||||
* TODO: Document some known SIC issues.
|
||||
|
|
|
@ -92,16 +92,22 @@ bfin_gpio_io_write_buffer (struct hw *me, const void *source, int space,
|
|||
case mmr_offset(clear):
|
||||
case mmr_offset(maska_clear):
|
||||
case mmr_offset(maskb_clear):
|
||||
/* We want to clear the related data MMR. */
|
||||
valuep -= 2;
|
||||
dv_w1c_2 (valuep, value, -1);
|
||||
break;
|
||||
case mmr_offset(set):
|
||||
case mmr_offset(maska_set):
|
||||
case mmr_offset(maskb_set):
|
||||
/* We want to set the related data MMR. */
|
||||
valuep -= 4;
|
||||
*valuep |= value;
|
||||
break;
|
||||
case mmr_offset(toggle):
|
||||
case mmr_offset(maska_toggle):
|
||||
case mmr_offset(maskb_toggle):
|
||||
/* We want to toggle the related data MMR. */
|
||||
valuep -= 6;
|
||||
*valuep ^= value;
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Reference in a new issue