/*====================================================================
FUNCTION       dmb_power_off
DESCRIPTION         
DEPENDENCIES
RETURN VALUE
SIDE EFFECTS
======================================================================*/
void dmb_power_off(void)
{
  DMB_MSG_HW("[%s] start!!!\n", __func__);

#ifdef FEATURE_DMB_PMIC_POWER
  dmb_pmic_power_onoff(0);
#endif

#ifdef DMB_PWR_EN
  dmb_set_gpio(DMB_PWR_EN, 0);
#endif
  msleep(1);

#ifdef FEATURE_DMB_SET_ANT_PATH_POWER
  dmb_pmic_ant_switch_power(FALSE);
#endif

#ifdef FEATURE_DMB_SET_ANT_PATH
  dmb_set_gpio(DMB_ANT_SEL, 0);
#ifdef DMB_ANT_SEL2
  dmb_set_gpio(DMB_ANT_SEL2, 0);
#endif
#endif

#ifdef FEATURE_DMB_PMIC_TCXO_192M
  dmb_set_gpio(DMB_XO_SEL, 0);
#endif

  DMB_MSG_HW("[%s] end!!!\n", __func__);

#if (defined(FEATURE_DMB_TSIF_IF) && defined(FEATURE_DMB_TSIF_CLK_CTL))
  dmb_tsif_clk_disable();
#endif
}
/*====================================================================
FUNCTION       dmb_set_ant_path
DESCRIPTION         
DEPENDENCIES
RETURN VALUE
SIDE EFFECTS
======================================================================*/
void dmb_set_ant_path(int ant_type)
{
#ifdef FEATURE_DMB_SET_ANT_PATH
  DMB_MSG_HW("[%s] ant_type[%d]\n", __func__, ant_type);

#if defined(CONFIG_ARCH_MSM8960) && (DMB_ANT_SEL == 26)
  gpio_tlmm_config(GPIO_CFG(DMB_ANT_SEL, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
#endif

  if (ant_type == DMB_ANT_EARJACK)
  {
    dmb_set_gpio(DMB_ANT_SEL, DMB_ANT_EAR_ACT);
#ifdef DMB_ANT_SEL2
    dmb_set_gpio(DMB_ANT_SEL2, DMB_ANT_EAR_ACT2);
#endif
  }
  else
  {
    dmb_set_gpio(DMB_ANT_SEL, (DMB_ANT_EAR_ACT)?0:1);
#ifdef DMB_ANT_SEL2
    dmb_set_gpio(DMB_ANT_SEL2, (DMB_ANT_EAR_ACT2)?0:1);
#endif
  }

#else
  DMB_MSG_HW("[%s]  Do nothing, No ANT. switch\n", __func__);
#endif /* FEATURE_DMB_SET_ANT_PATH */
}
/*====================================================================
FUNCTION       dmb_set_gpio
DESCRIPTION         
DEPENDENCIES
RETURN VALUE
SIDE EFFECTS
======================================================================*/
void dmb_set_gpio(uint gpio, bool value)
{
#if 1
  gpio_set_value(gpio, value);
  DMB_MSG_HW("[%s] gpio [%d] set [%d]\n", __func__, gpio, value);

#ifdef FEATURE_DMB_GPIO_DEBUG
  DMB_MSG_HW("[%s] gpio [%d] get [%d]\n", __func__, gpio, gpio_get_value(gpio));
#endif
#else
  int rc = 0;

  rc = gpio_request(gpio, "dmb_gpio");
  if (!rc)
  {
    rc = gpio_direction_output(gpio, value);
    DMB_MSG_HW("[%s] gpio [%d] set [%d]\n", __func__, gpio, value);
  }
  else
  {
    DMB_MSG_HW("[%s] gpio_request fail!!!\n", __func__);
  }

#ifdef FEATURE_DMB_GPIO_DEBUG
  DMB_MSG_HW("[%s] gpio [%d] get [%d]\n", __func__, gpio, gpio_get_value(gpio));
#endif

  gpio_free(gpio);
#endif // 0
}
Example #4
0
static void dmb_pmic_xo_onoff(int on)
{
  int rc=0;

  DMB_MSG_HW("[%s] \n", __func__);

  if(!xo_handle_a2)
  {
    xo_handle_a2 = clk_get_sys("dmb_clk", "xo");
    if (IS_ERR(xo_handle_a2))
     DMB_MSG_HW("[%s] clk_get err \n", __func__);
  }

  if(on)
  {
    rc = clk_prepare_enable(xo_handle_a2);
    if(rc != 0)
     DMB_MSG_HW("[%s] clk_prepare_enable err [%d]\n", __func__, rc);
  }
  else
  {
    clk_disable_unprepare(xo_handle_a2);
  }
  if (rc < 0)
  {
    DMB_MSG_HW("[%s] Configuring dmb_pmic_xo_onoff failed (%d)\n", __func__, rc);
    return;
  }    
  return;
}
/*====================================================================
FUNCTION       dmb_gpio_init
DESCRIPTION         
DEPENDENCIES
RETURN VALUE
SIDE EFFECTS
======================================================================*/
void dmb_gpio_init(void)
{
  int i;
#ifdef CONFIG_ARCH_MSM
  int rc;
#endif

  DMB_MSG_HW("[%s] dmb_gpio_init!!!\n",__func__);

  for(i = 0; i < ARRAY_SIZE(dmb_gpio_init_table); i ++)
  {
#ifdef CONFIG_ARCH_MSM
    rc = gpio_tlmm_config(dmb_gpio_init_table[i], GPIO_CFG_ENABLE);
    if (rc)
    {
      DMB_MSG_HW("[%s] gpio_tlmm_config(%#x)=%d\n",__func__, dmb_gpio_init_table[i], rc);
      break;
    }
#elif defined(CONFIG_ARCH_TEGRA)
    tegra_gpio_enable(dmb_gpio_init_table[i][0]);
    tegra_gpio_init_configure(dmb_gpio_init_table[i][0],dmb_gpio_init_table[i][1],dmb_gpio_init_table[i][2]);
    //DMB_MSG_HW("[%s] dmb_gpio_init gpio[%d], is_input[%d], value[%d]\n", __func__, dmb_gpio_init_table[i][0], dmb_gpio_init_table[i][1], dmb_gpio_init_table[i][2]);
#endif
  }

// EF39S ant_sel low
#if (defined(CONFIG_SKY_EF39S_BOARD) && (BOARD_REV > WS10))
  dmb_set_gpio(DMB_ANT_SEL, 0);
#endif

  DMB_MSG_HW("[%s] end cnt[%d]!!!\n",__func__, i);
}
Example #6
0
/*====================================================================
FUNCTION       dmb_pmic_power_onoff
DESCRIPTION         
DEPENDENCIES
RETURN VALUE
SIDE EFFECTS
======================================================================*/
static boolean dmb_pmic_power_onoff(int on)
{
  int ret = 0;

#if defined(CONFIG_MACH_MSM8974_EF65S)
  ret = dmb_pmic_8921_onoff(on, "8941_l3", 1225000, 1225000);
  DMB_MSG_HW("8941 L3 onoff  [%d] !!!\n",ret);
#endif

#if defined(CONFIG_MACH_MSM8974_EF56S) || defined(CONFIG_MACH_MSM8974_EF58L)
  ret = dmb_pmic_8921_onoff(on, "8941_l3", 1150000, 1150000); //wgon test
  DMB_MSG_HW("dmb_pmic_power_onoff  [%d] !!!\n",ret);
#endif
  
#if defined(CONFIG_MACH_MSM8960_EF46L)
  ret = dmb_pmic_8921_onoff(on, "8921_l18", 1300000, 1300000);
#endif

#if defined(CONFIG_MACH_MSM8960_SIRIUSLTE) && (BOARD_VER != PT11)
  ret = dmb_pmic_8921_onoff(on, "8921_l18", 1200000, 1200000);
  ret = dmb_pmic_8921_onoff(on, "8921_lvs7", 0, 0);
#endif

#if defined(CONFIG_EF31S_32K_BOARD)
  //ret = ;
#endif

#if (defined(CONFIG_EF10_BOARD) || defined(CONFIG_EF12_BOARD))
  //ret = ;
#endif

  return ret;
}
Example #7
0
/*====================================================================
FUNCTION       dmb_gpio_init
DESCRIPTION         
DEPENDENCIES
RETURN VALUE
SIDE EFFECTS
======================================================================*/
void dmb_gpio_init(void)
{
  int i;
#ifdef CONFIG_ARCH_MSM
  int rc;
#endif

  DMB_MSG_HW("[%s] dmb_gpio_init!!!\n",__func__);

  for(i = 0; i < ARRAY_SIZE(dmb_gpio_init_table); i ++)
  {
#ifdef CONFIG_ARCH_MSM
#ifdef FEATURE_DMB_PMIC_GPIO
    if(GPIO_PIN(dmb_gpio_init_table[i]) >= FEATURE_DMB_PMIC_GPIO)
      continue;	// PMIC GPIO인 경우 board-8064-pmic.c에서 초기화 한다.
#endif
    rc = gpio_request(dmb_gpio_num[i], dmb_gpio_name[i]);
    if(rc)
    {
      DMB_MSG_HW("[%s] gpio_request fail %d  rc %d\n",__func__, dmb_gpio_num[i], rc);
      break;
    }
    rc = gpio_tlmm_config(dmb_gpio_init_table[i], GPIO_CFG_ENABLE);
    if(rc)
    {
      DMB_MSG_HW("[%s] gpio_tlmm_config(%#x)=%d\n",__func__, dmb_gpio_init_table[i], rc);
      break;
    }
#elif defined(CONFIG_ARCH_TEGRA)
    tegra_gpio_enable(dmb_gpio_init_table[i][0]);
    tegra_gpio_init_configure(dmb_gpio_init_table[i][0],dmb_gpio_init_table[i][1],dmb_gpio_init_table[i][2]);
    //DMB_MSG_HW("[%s] dmb_gpio_init gpio[%d], is_input[%d], value[%d]\n", __func__, dmb_gpio_init_table[i][0], dmb_gpio_init_table[i][1], dmb_gpio_init_table[i][2]);
#endif
  }

#if (defined(CONFIG_MACH_APQ8064_EF48S)||defined(CONFIG_MACH_APQ8064_EF49K)||defined(CONFIG_MACH_APQ8064_EF50L)||defined(CONFIG_MACH_APQ8064_EF51S)||defined(CONFIG_MACH_APQ8064_EF51K)||defined(CONFIG_MACH_APQ8064_EF51L))
 #ifdef DMB_ANT_SEL
  dmb_set_gpio(DMB_ANT_SEL, 0);
 #endif
#endif

// EF39S ant_sel low
#if (defined(CONFIG_SKY_EF39S_BOARD) && (BOARD_REV > WS10))
  dmb_set_gpio(DMB_ANT_SEL, 0);
#endif

  DMB_MSG_HW("[%s] end cnt[%d]!!!\n",__func__, i);
}
Example #8
0
/*====================================================================
FUNCTION       dmb_power_on
DESCRIPTION         
DEPENDENCIES
RETURN VALUE
SIDE EFFECTS
======================================================================*/
void dmb_power_on(void)
{
  DMB_MSG_HW("[%s] start!!!\n", __func__);

#ifdef FEATURE_DMB_SET_ANT_PATH_POWER
  dmb_pmic_ant_switch_power(TRUE);
#endif

#ifdef FEATURE_DMB_PMIC_19200
  dmb_pmic_xo_onoff(1);
#endif

#ifdef DMB_XO_SEL
  dmb_set_gpio(DMB_XO_SEL, 1);
#endif

#ifdef DMB_LNA_EN
  dmb_set_gpio(DMB_LNA_EN, 1);
#if 0 // zeros temp
  dmb_set_gpio(DMB_LNA, 0);
#endif //0
#endif

#if (defined(FEATURE_DMB_TSIF_IF) && defined(FEATURE_DMB_TSIF_CLK_CTL))
  dmb_tsif_clk_enable();
#endif
}
Example #9
0
static void dmb_pmic_xo_onoff(int on)
{
  int rc =0;

  if(!xo_handle_a1)
  {
    xo_handle_a1 = msm_xo_get(MSM_XO_TCXO_A1, "DMB_XTAL");
  }

  if(on)
  {
    rc = msm_xo_mode_vote(xo_handle_a1, MSM_XO_MODE_ON);
  }
  else
  {
    rc = msm_xo_mode_vote(xo_handle_a1, MSM_XO_MODE_OFF);
  }
  if (rc < 0)
  {
    DMB_MSG_HW("[%s] Configuring MSM_XO_MODE_ON_OFF failed (%d)\n", __func__, rc);
    return;
  }

  return;
}
/*====================================================================
FUNCTION       dmb_micro_usb_ant_detect
DESCRIPTION         
DEPENDENCIES
RETURN VALUE
SIDE EFFECTS
======================================================================*/
int dmb_micro_usb_ant_detect(void)
{
  int ret = 0;

  DMB_MSG_HW("[%s] on[%d]!!!\n", __func__, on);
  
  ret = pm8058_is_dmb_ant();

  return ret;
}
Example #11
0
/*====================================================================
FUNCTION       dmb_set_gpio
DESCRIPTION         
DEPENDENCIES
RETURN VALUE
SIDE EFFECTS
======================================================================*/
void dmb_set_gpio(uint gpio, bool value)
{
#ifdef FEATURE_DMB_USE_DTS
#ifdef FEATURE_DMB_PMIC_GPIO
  int pmic_gpio;
  dmb_ext_dev *ext_gpio = get_dmb_pmic_data();
#endif
#endif

#ifdef FEATURE_DMB_PMIC_GPIO
  if(gpio >= FEATURE_DMB_PMIC_GPIO)
  {
#ifdef FEATURE_DMB_USE_DTS
    if(DMB_PMIC_GPIO_NUM == 1)
    {
      pmic_gpio = ext_gpio->pmic_gpio[0];
    }
    else
    {
      //pmic_gpio = (gpio == DMB_RESET) ? ext_gpio->pmic_gpio[0] : ext_gpio->pmic_gpio[1];
    }
    gpio_set_value_cansleep(pmic_gpio, value);
    DMB_MSG_HW("[%s] PMIC gpio [%d] set [%d]\n", __func__, pmic_gpio, value);
#else
    gpio_set_value_cansleep(PMIC_GPIO_PM_TO_SYS(gpio), value);
#endif
  }
  else
#endif
    gpio_set_value(gpio, value);
  
  DMB_MSG_HW("[%s] gpio [%d] set [%d]\n", __func__, gpio, value);

#ifdef FEATURE_DMB_GPIO_DEBUG
#ifdef FEATURE_DMB_PMIC_GPIO
  if(gpio >= FEATURE_DMB_PMIC_GPIO)
    DMB_MSG_HW("[%s] gpio [%d] get [%d]\n", __func__, gpio, gpio_get_value_cansleep(PMIC_GPIO_PM_TO_SYS(gpio)));
  else
#endif
  DMB_MSG_HW("[%s] gpio [%d] get [%d]\n", __func__, gpio, gpio_get_value(gpio));
#endif
}
/*====================================================================
FUNCTION       dmb_pmic_8058_onoff
DESCRIPTION         
DEPENDENCIES
RETURN VALUE
SIDE EFFECTS
======================================================================*/
static boolean dmb_pmic_8058_onoff(int on, const char *id, int min_uV, int max_uV)
{
  static struct regulator *vreg; //If verg value was changed, can not disable regulator
  int ret = 0;
  
  DMB_MSG_HW("[%s] on[%d]!!!\n", __func__, on);

  vreg = regulator_get(NULL, id);

  if ((min_uV > 0) && (max_uV > 0))
  {
    ret = regulator_set_voltage(vreg, min_uV, max_uV);
  }

  if(on)
  {
    if(!ret) ret = regulator_enable(vreg);

    if(ret)
    {
      DMB_MSG_HW("DMB regulator_enable Fail [%d] !!!\n",ret);
      return FALSE;
    }
  }
  else
  {
    ret = regulator_disable(vreg);

    if(ret)
    {
      DMB_MSG_HW("DMB regulator_disable Fail [%d] !!!\n",ret);
      return FALSE;      
    }
  }

  return TRUE;
}
/*====================================================================
FUNCTION       dmb_power_on_chip
DESCRIPTION         
DEPENDENCIES
RETURN VALUE
SIDE EFFECTS
======================================================================*/
void dmb_power_on_chip(void)
{
  DMB_MSG_HW("[%s] start!!!\n", __func__);

#ifdef FEATURE_DMB_PMIC_POWER
  dmb_pmic_power_onoff(1);
#endif

#ifdef DMB_PWR_EN
  dmb_set_gpio(DMB_PWR_EN, 1);
#endif

#if defined(CONFIG_MACH_MSM8960_SIRIUSLTE) && (BOARD_VER == PT11)
  dmb_set_gpio(58, 1);
  dmb_set_gpio(77, 1);
#endif
}