summaryrefslogtreecommitdiff
path: root/firmware/drivers/lcd-h100-remote.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/lcd-h100-remote.c')
-rw-r--r--firmware/drivers/lcd-h100-remote.c10
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;
717static void solidblock(unsigned char *address, unsigned mask, unsigned bits) 717static 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
722static void flipinvblock(unsigned char *address, unsigned mask, unsigned bits) 725static 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;
745static void solidinvblock(unsigned char *address, unsigned mask, unsigned bits) 748static 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
750lcd_blockfunc_type* const lcd_remote_blockfuncs[8] = { 756lcd_blockfunc_type* const lcd_remote_blockfuncs[8] = {