diff options
Diffstat (limited to 'firmware/drivers/lcd-h100-remote.c')
-rw-r--r-- | firmware/drivers/lcd-h100-remote.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/firmware/drivers/lcd-h100-remote.c b/firmware/drivers/lcd-h100-remote.c index 4d58db9a56..f7b3c21f48 100644 --- a/firmware/drivers/lcd-h100-remote.c +++ b/firmware/drivers/lcd-h100-remote.c | |||
@@ -716,7 +716,10 @@ static void solidblock(unsigned char *address, unsigned mask, unsigned bits) | |||
716 | ICODE_ATTR; | 716 | ICODE_ATTR; |
717 | static void solidblock(unsigned char *address, unsigned mask, unsigned bits) | 717 | static void solidblock(unsigned char *address, unsigned mask, unsigned bits) |
718 | { | 718 | { |
719 | *address = (*address & ~mask) | (bits & mask); | 719 | unsigned data = *address; |
720 | |||
721 | bits ^= data; | ||
722 | *address = data ^ (bits & mask); | ||
720 | } | 723 | } |
721 | 724 | ||
722 | static void flipinvblock(unsigned char *address, unsigned mask, unsigned bits) | 725 | static void flipinvblock(unsigned char *address, unsigned mask, unsigned bits) |
@@ -744,7 +747,10 @@ static void solidinvblock(unsigned char *address, unsigned mask, unsigned bits) | |||
744 | ICODE_ATTR; | 747 | ICODE_ATTR; |
745 | static void solidinvblock(unsigned char *address, unsigned mask, unsigned bits) | 748 | static void solidinvblock(unsigned char *address, unsigned mask, unsigned bits) |
746 | { | 749 | { |
747 | *address = (*address & ~mask) | (~bits & mask); | 750 | unsigned data = *address; |
751 | |||
752 | bits = ~bits ^ data; | ||
753 | *address = data ^ (bits & mask); | ||
748 | } | 754 | } |
749 | 755 | ||
750 | lcd_blockfunc_type* const lcd_remote_blockfuncs[8] = { | 756 | lcd_blockfunc_type* const lcd_remote_blockfuncs[8] = { |