/* LCD init */
void lcd_init_device(void)
{
#if (NUM_CORES > 1) && defined(HAVE_BACKLIGHT_INVERSION)
    corelock_init(&cl);
#endif
#ifdef IPOD_MINI2G /* serial LCD hookup */
    lcd_wait_write();
    LCD1_CONTROL = 0x01730084; /* fastest setting */
#elif defined(IPOD_1G2G) || defined(IPOD_3G)
    LCD1_CONTROL = (LCD1_CONTROL & 0x0002) | 0x0084; 
                   /* fastest setting, keep backlight bit */
#else
    LCD1_CONTROL = 0x0084; /* fastest setting */
#endif

    lcd_cmd_and_data(R_DRV_WAVEFORM_CONTROL, 0x48);
                     /* C waveform, no EOR, 9 lines inversion */
    lcd_cmd_and_data(R_POWER_CONTROL, POWER_REG_H | 0xc);
    lcd_cmd_and_data(R_DISPLAY_CONTROL, 0x0019);
    lcd_set_contrast(DEFAULT_CONTRAST);
#ifdef HAVE_BACKLIGHT_INVERSION
    invert_display();
#endif
    lcd_set_flip(false);
    lcd_cmd_and_data(R_ENTRY_MODE, 0x0000);
}
/**
 * @brief   Low level GDISP driver initialization.
 *
 * @notapi
 */
bool_t gdisp_lld_init(void) {
  // Initialize your display
  init_board();

  // Hardware reset.
  setpin_reset(TRUE);
  delay_ms(10);
  setpin_reset(FALSE);
  delay_ms(1);

  write_cmd(ST7565_LCD_BIAS_7);
  write_cmd(ST7565_ADC_NORMAL);
  write_cmd(ST7565_COM_SCAN_INC);
  set_display_start_line(0);

  set_contrast(32);
  write_cmd(ST7565_RESISTOR_RATIO | 0x3);

  // turn on voltage converter (VC=1, VR=0, VF=0)
  write_cmd(ST7565_POWER_CONTROL | 0x04);
  delay_ms(50);
  // turn on voltage regulator (VC=1, VR=1, VF=0)
  write_cmd(ST7565_POWER_CONTROL | 0x06);
  delay_ms(50);
  // turn on voltage follower (VC=1, VR=1, VF=1)
  write_cmd(ST7565_POWER_CONTROL | 0x07);
  delay_ms(50);

  display_on();
  write_cmd(ST7565_ALLON_NORMAL);
  invert_display(0);// Disable Inversion of display.

  write_cmd(ST7565_RMW);
  gdisp_lld_display();

  // Initialize the GDISP structure
  GDISP.Width = GDISP_SCREEN_WIDTH;
  GDISP.Height = GDISP_SCREEN_HEIGHT;
  GDISP.Orientation = GDISP_ROTATE_0;
  GDISP.Powermode = powerOn;
  GDISP.Contrast = 50;
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
  GDISP.clipx0 = 0;
  GDISP.clipy0 = 0;
  GDISP.clipx1 = GDISP.Width;
  GDISP.clipy1 = GDISP.Height;
#endif
  return TRUE;
}
void lcd_set_backlight_inversion(bool yesno)
{
    lcd_backlit = yesno;
    invert_display();
}
void lcd_set_invert_display(bool yesno)
{
    lcd_inverted = yesno;
    invert_display();
}