added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Revision:
50:a417edff4437
Parent:
0:9b334a45a8ff
Child:
144:ef7eb2e8f9f7
--- a/targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_lcd.c	Wed Jan 13 12:45:11 2016 +0000
+++ b/targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_lcd.c	Fri Jan 15 07:45:16 2016 +0000
@@ -1,10 +1,10 @@
 /***************************************************************************//**
  * @file em_lcd.c
  * @brief Liquid Crystal Display (LCD) Peripheral API
- * @version 3.20.12
+ * @version 4.2.1
  *******************************************************************************
  * @section License
- * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
  *******************************************************************************
  *
  * Permission is granted to anyone to use this software for any purpose,
@@ -30,11 +30,10 @@
  *
  ******************************************************************************/
 
-
 #include "em_lcd.h"
 #if defined(LCD_COUNT) && (LCD_COUNT > 0)
 #include "em_assert.h"
-#include "em_bitband.h"
+#include "em_bus.h"
 
 /***************************************************************************//**
  * @addtogroup EM_Library
@@ -70,15 +69,15 @@
   LCD_Enable(false);
 
   /* Make sure we don't touch other bit fields (i.e. voltage boost) */
-  dispCtrl &= ~(
-#if defined(_EFM32_TINY_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-    _LCD_DISPCTRL_MUXE_MASK |
+  dispCtrl &= ~(0
+#if defined(LCD_DISPCTRL_MUXE)
+                | _LCD_DISPCTRL_MUXE_MASK
 #endif
-    _LCD_DISPCTRL_MUX_MASK |
-    _LCD_DISPCTRL_BIAS_MASK |
-    _LCD_DISPCTRL_WAVE_MASK |
-    _LCD_DISPCTRL_VLCDSEL_MASK |
-    _LCD_DISPCTRL_CONCONF_MASK);
+                | _LCD_DISPCTRL_MUX_MASK
+                | _LCD_DISPCTRL_BIAS_MASK
+                | _LCD_DISPCTRL_WAVE_MASK
+                | _LCD_DISPCTRL_VLCDSEL_MASK
+                | _LCD_DISPCTRL_CONCONF_MASK);
 
   /* Configure controller according to initialization structure */
   dispCtrl |= lcdInit->mux; /* also configures MUXE */
@@ -110,17 +109,17 @@
   uint32_t dispctrl = LCD->DISPCTRL;
 
   /* Select VEXT or VDD */
-  dispctrl &= ~(_LCD_DISPCTRL_VLCDSEL_MASK);
+  dispctrl &= ~_LCD_DISPCTRL_VLCDSEL_MASK;
   switch (vlcd)
   {
-  case lcdVLCDSelVExtBoost:
-    dispctrl |= LCD_DISPCTRL_VLCDSEL_VEXTBOOST;
-    break;
-  case lcdVLCDSelVDD:
-    dispctrl |= LCD_DISPCTRL_VLCDSEL_VDD;
-    break;
-  default:
-    break;
+    case lcdVLCDSelVExtBoost:
+      dispctrl |= LCD_DISPCTRL_VLCDSEL_VEXTBOOST;
+      break;
+    case lcdVLCDSelVDD:
+      dispctrl |= LCD_DISPCTRL_VLCDSEL_VDD;
+      break;
+    default:
+      break;
   }
 
   LCD->DISPCTRL = dispctrl;
@@ -157,8 +156,8 @@
   EFM_ASSERT(fcInit->top < 64);
 
   /* Reconfigure frame count configuration */
-  bactrl &= ~(_LCD_BACTRL_FCTOP_MASK |
-              _LCD_BACTRL_FCPRESC_MASK);
+  bactrl &= ~(_LCD_BACTRL_FCTOP_MASK
+              | _LCD_BACTRL_FCPRESC_MASK);
   bactrl |= (fcInit->top << _LCD_BACTRL_FCTOP_SHIFT);
   bactrl |= fcInit->prescale;
 
@@ -187,15 +186,15 @@
   LCD->AREGB = animInit->BReg;
 
   /* Configure Animation Shift and Logic */
-  bactrl &= ~(_LCD_BACTRL_AREGASC_MASK |
-              _LCD_BACTRL_AREGBSC_MASK |
-              _LCD_BACTRL_ALOGSEL_MASK);
+  bactrl &= ~(_LCD_BACTRL_AREGASC_MASK
+              | _LCD_BACTRL_AREGBSC_MASK
+              | _LCD_BACTRL_ALOGSEL_MASK);
 
   bactrl |= (animInit->AShift << _LCD_BACTRL_AREGASC_SHIFT);
   bactrl |= (animInit->BShift << _LCD_BACTRL_AREGBSC_SHIFT);
   bactrl |= animInit->animLogic;
 
-#if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
+#if defined(LCD_BACTRL_ALOC)
   bactrl &= ~(_LCD_BACTRL_ALOC_MASK);
 
   if(animInit->startSeg == 0)
@@ -260,7 +259,7 @@
  ******************************************************************************/
 void LCD_SegmentSet(int com, int bit, bool enable)
 {
-#if defined(_EFM32_TINY_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
+#if defined(_LCD_SEGD7L_MASK)
   /* Tiny and Giant Family supports up to 8 COM lines */
   EFM_ASSERT(com < 8);
 #else
@@ -268,7 +267,7 @@
   EFM_ASSERT(com < 4);
 #endif
 
-#if defined(_EFM32_GECKO_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
+#if defined(_LCD_SEGD0H_MASK)
   EFM_ASSERT(bit < 40);
 #else
   /* Tiny Gecko Family supports only "low" segment registers */
@@ -278,122 +277,122 @@
   /* Use bitband access for atomic bit set/clear of segment */
   switch (com)
   {
-  case 0:
-    if (bit < 32)
-    {
-      BITBAND_Peripheral(&(LCD->SEGD0L), bit, (unsigned int)enable);
-    }
-#if defined(_EFM32_GECKO_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-    else
-    {
-      bit -= 32;
-      BITBAND_Peripheral(&(LCD->SEGD0H), bit, (unsigned int)enable);
-    }
+    case 0:
+      if (bit < 32)
+      {
+        BUS_RegBitWrite(&(LCD->SEGD0L), bit, enable);
+      }
+#if defined(_LCD_SEGD0H_MASK)
+      else
+      {
+        bit -= 32;
+        BUS_RegBitWrite(&(LCD->SEGD0H), bit, enable);
+      }
 #endif
-    break;
-  case 1:
-    if (bit < 32)
-    {
-      BITBAND_Peripheral(&(LCD->SEGD1L), bit, (unsigned int)enable);
-    }
-#if defined(_EFM32_GECKO_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-    else
-    {
-      bit -= 32;
-      BITBAND_Peripheral(&(LCD->SEGD1H), bit, (unsigned int)enable);
-    }
+      break;
+    case 1:
+      if (bit < 32)
+      {
+        BUS_RegBitWrite(&(LCD->SEGD1L), bit, enable);
+      }
+#if defined(_LCD_SEGD1H_MASK)
+      else
+      {
+        bit -= 32;
+        BUS_RegBitWrite(&(LCD->SEGD1H), bit, enable);
+      }
 #endif
-    break;
-  case 2:
-    if (bit < 32)
-    {
-      BITBAND_Peripheral(&(LCD->SEGD2L), bit, (unsigned int)enable);
-    }
-#if defined(_EFM32_GECKO_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-    else
-    {
-      bit -= 32;
-      BITBAND_Peripheral(&(LCD->SEGD2H), bit, (unsigned int)enable);
-    }
+      break;
+    case 2:
+      if (bit < 32)
+      {
+        BUS_RegBitWrite(&(LCD->SEGD2L), bit, enable);
+      }
+#if defined(_LCD_SEGD2H_MASK)
+      else
+      {
+        bit -= 32;
+        BUS_RegBitWrite(&(LCD->SEGD2H), bit, enable);
+      }
 #endif
-    break;
-  case 3:
-    if (bit < 32)
-    {
-      BITBAND_Peripheral(&(LCD->SEGD3L), bit, (unsigned int)enable);
-    }
-#if defined(_EFM32_GECKO_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-    else
-    {
-      bit -= 32;
-      BITBAND_Peripheral(&(LCD->SEGD3H), bit, (unsigned int)enable);
-    }
+      break;
+    case 3:
+      if (bit < 32)
+      {
+        BUS_RegBitWrite(&(LCD->SEGD3L), bit, enable);
+      }
+#if defined(_LCD_SEGD3H_MASK)
+      else
+      {
+        bit -= 32;
+        BUS_RegBitWrite(&(LCD->SEGD3H), bit, enable);
+      }
 #endif
-    break;
-  case 4:
-#if defined(_EFM32_TINY_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-    if (bit < 32)
-    {
-      BITBAND_Peripheral(&(LCD->SEGD4L), bit, (unsigned int)enable);
-    }
-#endif
-#if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-    else
-    {
-      bit -= 32;
-      BITBAND_Peripheral(&(LCD->SEGD4H), bit, (unsigned int)enable);
-    }
+      break;
+#if defined(_LCD_SEGD4L_MASK)
+    case 4:
+      if (bit < 32)
+      {
+        BUS_RegBitWrite(&(LCD->SEGD4L), bit, enable);
+      }
+#if defined(_LCD_SEGD4H_MASK)
+      else
+      {
+        bit -= 32;
+        BUS_RegBitWrite(&(LCD->SEGD4H), bit, enable);
+      }
 #endif
-    break;
-  case 5:
-#if defined(_EFM32_TINY_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-    if (bit < 32)
-    {
-      BITBAND_Peripheral(&(LCD->SEGD5L), bit, (unsigned int)enable);
-    }
+      break;
 #endif
-#if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-    else
-    {
-      bit -= 32;
-      BITBAND_Peripheral(&(LCD->SEGD5H), bit, (unsigned int)enable);
-    }
+#if defined(_LCD_SEGD5L_MASK)
+    case 5:
+      if (bit < 32)
+      {
+        BUS_RegBitWrite(&(LCD->SEGD5L), bit, enable);
+      }
+#if defined(_LCD_SEGD5H_MASK)
+      else
+      {
+        bit -= 32;
+        BUS_RegBitWrite(&(LCD->SEGD5H), bit, enable);
+      }
+#endif
+      break;
 #endif
-    break;
-  case 6:
-#if defined(_EFM32_TINY_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-    if (bit < 32)
-    {
-      BITBAND_Peripheral(&(LCD->SEGD6L), bit, (unsigned int)enable);
-    }
+    case 6:
+#if defined(_LCD_SEGD6L_MASK)
+      if (bit < 32)
+      {
+        BUS_RegBitWrite(&(LCD->SEGD6L), bit, enable);
+      }
+#if defined(_LCD_SEGD6H_MASK)
+      else
+      {
+        bit -= 32;
+        BUS_RegBitWrite(&(LCD->SEGD6H), bit, enable);
+      }
 #endif
-#if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-    else
-    {
-      bit -= 32;
-      BITBAND_Peripheral(&(LCD->SEGD6H), bit, (unsigned int)enable);
-    }
+      break;
 #endif
-    break;
-  case 7:
-#if defined(_EFM32_TINY_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-    if (bit < 32)
-    {
-      BITBAND_Peripheral(&(LCD->SEGD7L), bit, (unsigned int)enable);
-    }
+#if defined(_LCD_SEGD7L_MASK)
+    case 7:
+      if (bit < 32)
+      {
+        BUS_RegBitWrite(&(LCD->SEGD7L), bit, enable);
+      }
+#if defined(_LCD_SEGD7H_MASK)
+      else
+      {
+        bit -= 32;
+        BUS_RegBitWrite(&(LCD->SEGD7H), bit, enable);
+      }
 #endif
-#if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-    else
-    {
-      bit -= 32;
-      BITBAND_Peripheral(&(LCD->SEGD7H), bit, (unsigned int)enable);
-    }
+      break;
 #endif
-    break;
 
-  default:
-    EFM_ASSERT(0);
-    break;
+    default:
+      EFM_ASSERT(0);
+      break;
   }
 }
 
@@ -417,7 +416,7 @@
   uint32_t segData;
 
   /* Maximum number of com lines */
-#if defined(_EFM32_TINY_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
+#if defined(_LCD_SEGD7L_MASK)
   EFM_ASSERT(com < 8);
 #else
   /* Gecko Family supports up to 4 COM lines */
@@ -426,70 +425,70 @@
 
   switch (com)
   {
-  case 0:
-    segData     = LCD->SEGD0L;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD0L = segData;
-    break;
-  case 1:
-    segData     = LCD->SEGD1L;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD1L = segData;
-    break;
-  case 2:
-    segData     = LCD->SEGD2L;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD2L = segData;
-    break;
-  case 3:
-    segData     = LCD->SEGD3L;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD3L = segData;
-    break;
-#if defined(_EFM32_TINY_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-  case 4:
-    segData     = LCD->SEGD4L;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD4L = segData;
-    break;
+    case 0:
+      segData     = LCD->SEGD0L;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD0L = segData;
+      break;
+    case 1:
+      segData     = LCD->SEGD1L;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD1L = segData;
+      break;
+    case 2:
+      segData     = LCD->SEGD2L;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD2L = segData;
+      break;
+    case 3:
+      segData     = LCD->SEGD3L;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD3L = segData;
+      break;
+#if defined(_LCD_SEGD4L_MASK)
+    case 4:
+      segData     = LCD->SEGD4L;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD4L = segData;
+      break;
 #endif
-#if defined(_EFM32_TINY_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY) 
-  case 5:
-    segData     = LCD->SEGD5L;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD5L = segData;
-    break;
+#if defined(_LCD_SEGD5L_MASK)
+    case 5:
+      segData     = LCD->SEGD5L;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD5L = segData;
+      break;
 #endif
-#if defined(_EFM32_TINY_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-  case 6:
-    segData     = LCD->SEGD6L;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD6L = segData;
-    break;
+#if defined(_LCD_SEGD6L_MASK)
+    case 6:
+      segData     = LCD->SEGD6L;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD6L = segData;
+      break;
 #endif
-#if defined(_EFM32_TINY_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-  case 7:
-    segData     = LCD->SEGD7L;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD7L = segData;
-    break;
+#if defined(_LCD_SEGD7L_MASK)
+    case 7:
+      segData     = LCD->SEGD7L;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD7L = segData;
+      break;
 #endif
-  default:
-    EFM_ASSERT(0);
-    break;
+    default:
+      EFM_ASSERT(0);
+      break;
   }
 }
 
 
-#if defined(_EFM32_GECKO_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
+#if defined(_LCD_SEGD0H_MASK)
 /***************************************************************************//**
  * @brief
  *   Updated the high (32-39) segments on a given COM-line in one operation
@@ -507,74 +506,73 @@
 {
   uint32_t segData;
 
-#if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
+#if defined(_LCD_SEGD7H_MASK)
   EFM_ASSERT(com < 8);
-#endif
-#if defined(_EFM32_GECKO_FAMILY)
+#else
   EFM_ASSERT(com < 4);
 #endif
 
   /* Maximum number of com lines */
   switch (com)
   {
-  case 0:
-    segData     = LCD->SEGD0H;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD0H = segData;
-    break;
-  case 1:
-    segData     = LCD->SEGD1H;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD1H = segData;
-    break;
-  case 2:
-    segData     = LCD->SEGD2H;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD2H = segData;
-    break;
-  case 3:
-    segData     = LCD->SEGD3H;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD3H = segData;
-    break;
-#if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-  case 4:
-    segData     = LCD->SEGD4H;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD4H = segData;
-    break;
+    case 0:
+      segData     = LCD->SEGD0H;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD0H = segData;
+      break;
+    case 1:
+      segData     = LCD->SEGD1H;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD1H = segData;
+      break;
+    case 2:
+      segData     = LCD->SEGD2H;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD2H = segData;
+      break;
+    case 3:
+      segData     = LCD->SEGD3H;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD3H = segData;
+      break;
+#if defined(_LCD_SEGD4H_MASK)
+    case 4:
+      segData     = LCD->SEGD4H;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD4H = segData;
+      break;
 #endif
-#if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-  case 5:
-    segData     = LCD->SEGD5H;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD5H = segData;
-    break;
+#if defined(_LCD_SEGD5H_MASK)
+    case 5:
+      segData     = LCD->SEGD5H;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD5H = segData;
+      break;
 #endif
-#if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-  case 6:
-    segData     = LCD->SEGD6H;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD6H = segData;
-    break;
+#if defined(_LCD_SEGD6H_MASK)
+    case 6:
+      segData     = LCD->SEGD6H;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD6H = segData;
+      break;
 #endif
-#if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-  case 7:
-    segData     = LCD->SEGD7H;
-    segData    &= ~(mask);
-    segData    |= (mask & bits);
-    LCD->SEGD7H = segData;
-    break;
+#if defined(_LCD_SEGD7H_MASK)
+    case 7:
+      segData     = LCD->SEGD7H;
+      segData    &= ~(mask);
+      segData    |= (mask & bits);
+      LCD->SEGD7H = segData;
+      break;
 #endif
-  default:
-    break;
+    default:
+      break;
   }
 }
 #endif
@@ -611,7 +609,7 @@
 }
 
 
-#if defined(_EFM32_TINY_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
+#if defined(LCD_CTRL_DSC)
 /***************************************************************************//**
  * @brief
  *   Configure bias level for a specific segment line for Direct Segment Control
@@ -637,100 +635,99 @@
   int               bitShift;
   volatile uint32_t *segmentRegister;
 
-#if defined(_EFM32_TINY_FAMILY)
+#if !defined(_LCD_SEGD0H_MASK)
   EFM_ASSERT(segmentLine < 20);
-#endif
-#if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
-  EFM_ASSERT(segmentLine < 40);
-#endif
-#if defined(_EFM32_TINY_FAMILY)
+
   /* Bias config for 8 segment lines per SEGDnL register */
   biasRegister = segmentLine / 8;
   bitShift     = (segmentLine % 8) * 4;
 
   switch (biasRegister)
   {
-  case 0:
-    segmentRegister = &LCD->SEGD0L;
-    break;
-  case 1:
-    segmentRegister = &LCD->SEGD1L;
-    break;
-  case 2:
-    segmentRegister = &LCD->SEGD2L;
-    break;
-  case 3:
-    segmentRegister = &LCD->SEGD3L;
-    break;
-  default:
-    segmentRegister = (uint32_t *)0x00000000;
-    EFM_ASSERT(0);
-    break;
+    case 0:
+      segmentRegister = &LCD->SEGD0L;
+      break;
+    case 1:
+      segmentRegister = &LCD->SEGD1L;
+      break;
+    case 2:
+      segmentRegister = &LCD->SEGD2L;
+      break;
+    case 3:
+      segmentRegister = &LCD->SEGD3L;
+      break;
+    default:
+      segmentRegister = (uint32_t *)0x00000000;
+      EFM_ASSERT(0);
+      break;
   }
-#endif
-#if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY) 
+#else
+  EFM_ASSERT(segmentLine < 40);
+
   /* Bias config for 10 segment lines per SEGDn L+H registers */
   biasRegister = segmentLine / 10;
   bitShift     = (segmentLine % 10) * 4;
 
   switch (biasRegister)
   {
-  case 0:
-    if (bitShift < 32)
-    {
-      segmentRegister = &LCD->SEGD0L;
-    }
-    else
-    {
-      segmentRegister = &LCD->SEGD0H;
-      bitShift       -= 32;
-    }
-    break;
-  case 1:
-    if (bitShift < 32)
-    {
-      segmentRegister = &LCD->SEGD1L;
-    }
-    else
-    {
-      segmentRegister = &LCD->SEGD1H;
-      bitShift       -= 32;
-    }
-    break;
-  case 2:
-    if (bitShift < 32)
-    {
-      segmentRegister = &LCD->SEGD2L;
-    }
-    else
-    {
-      segmentRegister = &LCD->SEGD1H;
-      bitShift       -= 32;
-    }
-    break;
-  case 3:
-    if (bitShift < 32)
-    {
-      segmentRegister = &LCD->SEGD3L;
-    }
-    else
-    {
-      segmentRegister = &LCD->SEGD3H;
-      bitShift       -= 32;
-    }
-    break;
-  default:
-    segmentRegister = (uint32_t *)0x00000000;
-    EFM_ASSERT(0);
-    break;
+    case 0:
+      if (bitShift < 32)
+      {
+        segmentRegister = &LCD->SEGD0L;
+      }
+      else
+      {
+        segmentRegister = &LCD->SEGD0H;
+        bitShift       -= 32;
+      }
+      break;
+    case 1:
+      if (bitShift < 32)
+      {
+        segmentRegister = &LCD->SEGD1L;
+      }
+      else
+      {
+        segmentRegister = &LCD->SEGD1H;
+        bitShift       -= 32;
+      }
+      break;
+    case 2:
+      if (bitShift < 32)
+      {
+        segmentRegister = &LCD->SEGD2L;
+      }
+      else
+      {
+        segmentRegister = &LCD->SEGD1H;
+        bitShift       -= 32;
+      }
+      break;
+    case 3:
+      if (bitShift < 32)
+      {
+        segmentRegister = &LCD->SEGD3L;
+      }
+      else
+      {
+        segmentRegister = &LCD->SEGD3H;
+        bitShift       -= 32;
+      }
+      break;
+    default:
+      segmentRegister = (uint32_t *)0x00000000;
+      EFM_ASSERT(0);
+      break;
   }
 #endif
 
   /* Configure new bias setting */
   *segmentRegister = (*segmentRegister & ~(0xF << bitShift)) | (biasLevel << bitShift);
 }
+#endif
 
 
+#if defined(LCD_CTRL_DSC)
 /***************************************************************************//**
  * @brief
  *   Configure bias level for a specific segment line