#ifdef CONFIG_SPLASH_SCREEN_ALIGN
 #define BMP_ALIGN_CENTER       0x7FFF
+
+static void splash_align_axis(int *axis, unsigned long panel_size,
+                                       unsigned long picture_size)
+{
+       unsigned long panel_picture_delta = panel_size - picture_size;
+       unsigned long axis_alignment;
+
+       if (*axis == BMP_ALIGN_CENTER)
+               axis_alignment = panel_picture_delta / 2;
+       else if (*axis < 0)
+               axis_alignment = panel_picture_delta + *axis + 1;
+       else
+               return;
+
+       *axis = max(0, axis_alignment);
+}
 #endif
 
 int lcd_display_bitmap(ulong bmp_image, int x, int y)
        padded_line = (width&0x3) ? ((width&~0x3)+4) : (width);
 
 #ifdef CONFIG_SPLASH_SCREEN_ALIGN
-       if (x == BMP_ALIGN_CENTER)
-               x = max(0, (pwidth - width) / 2);
-       else if (x < 0)
-               x = max(0, pwidth - width + x + 1);
-
-       if (y == BMP_ALIGN_CENTER)
-               y = max(0, (panel_info.vl_row - height) / 2);
-       else if (y < 0)
-               y = max(0, panel_info.vl_row - height + y + 1);
+       splash_align_axis(&x, pwidth, width);
+       splash_align_axis(&y, panel_info.vl_row, height);
 #endif /* CONFIG_SPLASH_SCREEN_ALIGN */
 
        if ((x + width) > pwidth)