down(&pmac_backlight->sem);
                props = pmac_backlight->props;
                props->brightness = brightness *
-                       props->max_brightness / OLD_BACKLIGHT_MAX;
+                       (props->max_brightness + 1) /
+                       (OLD_BACKLIGHT_MAX + 1);
+
+               if (props->brightness > props->max_brightness)
+                       props->brightness = props->max_brightness;
+               else if (props->brightness < 0)
+                       props->brightness = 0;
+
                props->update_status(pmac_backlight);
                up(&pmac_backlight->sem);
 
 
                down(&pmac_backlight->sem);
                props = pmac_backlight->props;
+
                result = props->brightness *
-                       OLD_BACKLIGHT_MAX / props->max_brightness;
+                       (OLD_BACKLIGHT_MAX + 1) /
+                       (props->max_brightness + 1);
+
                up(&pmac_backlight->sem);
        }
        mutex_unlock(&pmac_backlight_mutex);
 
 
        mutex_unlock(&info->bl_mutex);
 
-       if (pdata->negative)
-               rlevel = MAX_RADEON_LEVEL - rlevel;
-
        if (rlevel < 0)
                rlevel = 0;
        else if (rlevel > MAX_RADEON_LEVEL)
                rlevel = MAX_RADEON_LEVEL;
 
+       if (pdata->negative)
+               rlevel = MAX_RADEON_LEVEL - rlevel;
+
        return rlevel;
 }