i3c: Fix a shift wrap bug in i3c_bus_set_addr_slot_status()
[linux-2.6-microblaze.git] / drivers / i3c / master.c
index 2dc628d..d539252 100644 (file)
@@ -385,8 +385,9 @@ static void i3c_bus_set_addr_slot_status(struct i3c_bus *bus, u16 addr,
                return;
 
        ptr = bus->addrslots + (bitpos / BITS_PER_LONG);
-       *ptr &= ~(I3C_ADDR_SLOT_STATUS_MASK << (bitpos % BITS_PER_LONG));
-       *ptr |= status << (bitpos % BITS_PER_LONG);
+       *ptr &= ~((unsigned long)I3C_ADDR_SLOT_STATUS_MASK <<
+                                               (bitpos % BITS_PER_LONG));
+       *ptr |= (unsigned long)status << (bitpos % BITS_PER_LONG);
 }
 
 static bool i3c_bus_dev_addr_is_avail(struct i3c_bus *bus, u8 addr)