pm860x_page_bulk_read(info->i2c, REG0_ADDR, 8, buf);
        dev_dbg(info->dev, "%x-%x-%x-%x-%x-%x-%x-%x\n", buf[0], buf[1],
                buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]);
-       base = (buf[1] << 24) | (buf[3] << 16) | (buf[5] << 8) | buf[7];
+       base = ((unsigned long)buf[1] << 24) | (buf[3] << 16) |
+               (buf[5] << 8) | buf[7];
 
        /* load 32-bit read-only counter */
        pm860x_bulk_read(info->i2c, PM8607_RTC_COUNTER1, 4, buf);
-       data = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
+       data = ((unsigned long)buf[3] << 24) | (buf[2] << 16) |
+               (buf[1] << 8) | buf[0];
        ticks = base + data;
        dev_dbg(info->dev, "get base:0x%lx, RO count:0x%lx, ticks:0x%lx\n",
                base, data, ticks);
 
        /* load 32-bit read-only counter */
        pm860x_bulk_read(info->i2c, PM8607_RTC_COUNTER1, 4, buf);
-       data = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
+       data = ((unsigned long)buf[3] << 24) | (buf[2] << 16) |
+               (buf[1] << 8) | buf[0];
        base = ticks - data;
        dev_dbg(info->dev, "set base:0x%lx, RO count:0x%lx, ticks:0x%lx\n",
                base, data, ticks);
        pm860x_page_bulk_read(info->i2c, REG0_ADDR, 8, buf);
        dev_dbg(info->dev, "%x-%x-%x-%x-%x-%x-%x-%x\n", buf[0], buf[1],
                buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]);
-       base = (buf[1] << 24) | (buf[3] << 16) | (buf[5] << 8) | buf[7];
+       base = ((unsigned long)buf[1] << 24) | (buf[3] << 16) |
+               (buf[5] << 8) | buf[7];
 
        pm860x_bulk_read(info->i2c, PM8607_RTC_EXPIRE1, 4, buf);
-       data = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
+       data = ((unsigned long)buf[3] << 24) | (buf[2] << 16) |
+               (buf[1] << 8) | buf[0];
        ticks = base + data;
        dev_dbg(info->dev, "get base:0x%lx, RO count:0x%lx, ticks:0x%lx\n",
                base, data, ticks);
        pm860x_page_bulk_read(info->i2c, REG0_ADDR, 8, buf);
        dev_dbg(info->dev, "%x-%x-%x-%x-%x-%x-%x-%x\n", buf[0], buf[1],
                buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]);
-       base = (buf[1] << 24) | (buf[3] << 16) | (buf[5] << 8) | buf[7];
+       base = ((unsigned long)buf[1] << 24) | (buf[3] << 16) |
+               (buf[5] << 8) | buf[7];
 
        /* load 32-bit read-only counter */
        pm860x_bulk_read(info->i2c, PM8607_RTC_COUNTER1, 4, buf);
-       data = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
+       data = ((unsigned long)buf[3] << 24) | (buf[2] << 16) |
+               (buf[1] << 8) | buf[0];
        ticks = base + data;
        dev_dbg(info->dev, "get base:0x%lx, RO count:0x%lx, ticks:0x%lx\n",
                base, data, ticks);