📄 pmic_bklight.cpp
字号:
//-----------------------------------------------------------------------------
//
// Copyright (C) 2004, Motorola Inc. All Rights Reserved
//
//------------------------------------------------------------------------------
/*---------------------------------------------------------------------------
* Copyright (C) 2006, Freescale Semiconductor, Inc. All Rights Reserved.
* THIS SOURCE CODE, AND ITS USE AND DISTRIBUTION, IS SUBJECT TO THE TERMS
* AND CONDITIONS OF THE APPLICABLE LICENSE AGREEMENT
*--------------------------------------------------------------------------*/
//------------------------------------------------------------------------------
//
// File: pmic_bklight.cpp
//
// This file contains the PMIC Backlight SDK interface that is used by
// applications and other drivers to access registers of the PMIC.
//
//-----------------------------------------------------------------------------
#include <windows.h>
#include <Devload.h>
#include <ceddk.h>
#include "socarm_macros.h"
#include "pmic_ioctl.h"
#include "pmic_basic_types.h"
#include "pmic_bklight.h"
#include "regs.h"
#include "regs_led.h"
//-----------------------------------------------------------------------------
// External Functions
//-----------------------------------------------------------------------------
// External Variables
//-----------------------------------------------------------------------------
// Defines
//-----------------------------------------------------------------------------
// Types
//-----------------------------------------------------------------------------
// Global Variables
extern HANDLE hPMI;
#ifdef DEBUG
// Debug zone bit positions
#define ZONEID_ERROR 0
#define ZONEID_WARN 1
#define ZONEID_INIT 2
#define ZONEID_FUNC 3
#define ZONEID_INFO 4
// Debug zone masks
#define ZONEMASK_ERROR (1 << ZONEID_ERROR)
#define ZONEMASK_WARN (1 << ZONEID_WARN)
#define ZONEMASK_INIT (1 << ZONEID_INIT)
#define ZONEMASK_FUNC (1 << ZONEID_FUNC)
#define ZONEMASK_INFO (1 << ZONEID_INFO)
// Debug zone args to DEBUGMSG
#define ZONE_ERROR DEBUGZONE(ZONEID_ERROR)
#define ZONE_WARN DEBUGZONE(ZONEID_WARN)
#define ZONE_INIT DEBUGZONE(ZONEID_INIT)
#define ZONE_FUNC DEBUGZONE(ZONEID_FUNC)
#define ZONE_INFO DEBUGZONE(ZONEID_INFO)
extern DBGPARAM dpCurSettings;
#endif
//-----------------------------------------------------------------------------
// Local Variables
//-----------------------------------------------------------------------------
// Local Functions
//------------------------------------------------------------------------------
//
// Function: PmicBacklightMasterEnable
//
// This function sets the master enable bit of the PMIC backlight and tri-color led controller.
//
// Parameters:
// None.
//
// Returns:
// PMIC_STATUS.
//
//------------------------------------------------------------------------------
PMIC_STATUS PmicBacklightMasterEnable()
{
PMIC_PARAM_LLA_WRITE_REG param;
DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));
param.addr = MC13783_LED_CTL0_ADDR;
param.data = CSP_BITFVAL(MC13783_LED_CTL0_LEDEN, MC13783_LED_CTL0_LEDEN_ENABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_LEDEN);
if(! DeviceIoControl(hPMI, PMIC_IOCTL_LLA_WRITE_REG, ¶m,
sizeof(param), NULL, 0, NULL, NULL))
return PMIC_ERROR;
DEBUGMSG(ZONE_FUNC, (TEXT("-%s()\r\n"), __WFUNCTION__));
return PMIC_SUCCESS;
}
//------------------------------------------------------------------------------
//
// Function: PmicBacklightMasterDisable
//
// This function clears the master enable bit of the PMIC backlight and tri-color led controller.
//
// Parameters:
// None.
//
// Returns:
// PMIC_STATUS.
//
//------------------------------------------------------------------------------
PMIC_STATUS PmicBacklightMasterDisable()
{
PMIC_PARAM_LLA_WRITE_REG param;
DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));
//TODO: This bit controls both backlight and tri-color led channels.
//extra steps need to be done to avoid conflit.
param.addr = MC13783_LED_CTL0_ADDR;
param.data = CSP_BITFVAL(MC13783_LED_CTL0_LEDEN, MC13783_LED_CTL0_LEDEN_DISABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_LEDEN);
if(! DeviceIoControl(hPMI, PMIC_IOCTL_LLA_WRITE_REG, ¶m,
sizeof(param), NULL, 0, NULL, NULL))
return PMIC_ERROR;
DEBUGMSG(ZONE_FUNC, (TEXT("-%s()\r\n"), __WFUNCTION__));
return PMIC_SUCCESS;
}
//------------------------------------------------------------------------------
//
// Function: PmicBacklightRampUp
//
// This function ramps up the PMIC backlight channel.
//
// Parameters:
// channel [IN] backlight channel
//
// Returns:
// PMIC_STATUS.
//
//------------------------------------------------------------------------------
PMIC_STATUS PmicBacklightRampUp(BACKLIGHT_CHANNEL channel)
{
PMIC_PARAM_LLA_WRITE_REG param;
DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));
param.addr = MC13783_LED_CTL0_ADDR;
switch (channel)
{
case BACKLIGHT_MAIN_DISPLAY:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_LEDMDRAMPUP, MC13783_LED_CTL0_LEDRAMPUP_ENABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_LEDMDRAMPUP) |
CSP_BITFMASK(MC13783_LED_CTL0_LEDMDRAMPDOWN);
break;
case BACKLIGHT_AUX_DISPLAY:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_LEDADRAMPUP, MC13783_LED_CTL0_LEDRAMPUP_ENABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_LEDADRAMPUP) |
CSP_BITFMASK(MC13783_LED_CTL0_LEDADRAMPDOWN);
break;
case BACKLIGHT_KEYPAD:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_LEDKPRAMPUP, MC13783_LED_CTL0_LEDRAMPUP_ENABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_LEDKPRAMPUP) |
CSP_BITFMASK(MC13783_LED_CTL0_LEDKPRAMPDOWN);
break;
}
if(! DeviceIoControl(hPMI, PMIC_IOCTL_LLA_WRITE_REG, ¶m,
sizeof(param), NULL, 0, NULL, NULL))
return PMIC_ERROR;
DEBUGMSG(ZONE_FUNC, (TEXT("-%s()\r\n"), __WFUNCTION__));
return PMIC_SUCCESS;
}
//------------------------------------------------------------------------------
//
// Function: PmicBacklightRampDown
//
// This function ramps down the PMIC backlight channel.
//
// Parameters:
// channel[IN] backlight channel
//
// Returns:
// PMIC_STATUS.
//
//------------------------------------------------------------------------------
PMIC_STATUS PmicBacklightRampDown(BACKLIGHT_CHANNEL channel)
{
PMIC_PARAM_LLA_WRITE_REG param;
DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));
param.addr = MC13783_LED_CTL0_ADDR;
switch (channel)
{
case BACKLIGHT_MAIN_DISPLAY:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_LEDMDRAMPDOWN, MC13783_LED_CTL0_LEDRAMPDOWN_ENABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_LEDMDRAMPUP) |
CSP_BITFMASK(MC13783_LED_CTL0_LEDMDRAMPDOWN);
break;
case BACKLIGHT_AUX_DISPLAY:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_LEDADRAMPDOWN, MC13783_LED_CTL0_LEDRAMPDOWN_ENABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_LEDADRAMPUP) |
CSP_BITFMASK(MC13783_LED_CTL0_LEDADRAMPDOWN);
break;
case BACKLIGHT_KEYPAD:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_LEDKPRAMPDOWN, MC13783_LED_CTL0_LEDRAMPDOWN_ENABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_LEDKPRAMPUP) |
CSP_BITFMASK(MC13783_LED_CTL0_LEDKPRAMPDOWN);
break;
}
if(! DeviceIoControl(hPMI, PMIC_IOCTL_LLA_WRITE_REG, ¶m,
sizeof(param), NULL, 0, NULL, NULL))
return PMIC_ERROR;
DEBUGMSG(ZONE_FUNC, (TEXT("-%s()\r\n"), __WFUNCTION__));
return PMIC_SUCCESS;
}
//------------------------------------------------------------------------------
//
// Function: PmicBacklightRampUpOff
//
// This function stops ramping of the PMIC backlight channel.
//
// Parameters:
// channel [IN] backlight channel
//
// Returns:
// PMIC_STATUS.
//
//------------------------------------------------------------------------------
PMIC_STATUS PmicBacklightRampOff(BACKLIGHT_CHANNEL channel)
{
PMIC_PARAM_LLA_WRITE_REG param;
DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));
param.addr = MC13783_LED_CTL0_ADDR;
switch (channel)
{
case BACKLIGHT_MAIN_DISPLAY:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_LEDMDRAMPUP, MC13783_LED_CTL0_LEDRAMPUP_DISABLE) |
CSP_BITFVAL(MC13783_LED_CTL0_LEDMDRAMPDOWN, MC13783_LED_CTL0_LEDRAMPDOWN_DISABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_LEDMDRAMPUP) |
CSP_BITFMASK(MC13783_LED_CTL0_LEDMDRAMPDOWN);
break;
case BACKLIGHT_AUX_DISPLAY:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_LEDADRAMPUP, MC13783_LED_CTL0_LEDRAMPUP_DISABLE) |
CSP_BITFVAL(MC13783_LED_CTL0_LEDADRAMPDOWN, MC13783_LED_CTL0_LEDRAMPDOWN_DISABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_LEDADRAMPUP) |
CSP_BITFMASK(MC13783_LED_CTL0_LEDADRAMPDOWN);
break;
case BACKLIGHT_KEYPAD:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_LEDKPRAMPUP, MC13783_LED_CTL0_LEDRAMPUP_DISABLE) |
CSP_BITFVAL(MC13783_LED_CTL0_LEDKPRAMPDOWN, MC13783_LED_CTL0_LEDRAMPDOWN_DISABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_LEDKPRAMPUP) |
CSP_BITFMASK(MC13783_LED_CTL0_LEDKPRAMPDOWN);
break;
}
if(! DeviceIoControl(hPMI, PMIC_IOCTL_LLA_WRITE_REG, ¶m,
sizeof(param), NULL, 0, NULL, NULL))
return PMIC_ERROR;
DEBUGMSG(ZONE_FUNC, (TEXT("-%s()\r\n"), __WFUNCTION__));
return PMIC_SUCCESS;
}
//------------------------------------------------------------------------------
//
// Function: PmicBacklightSetMode
//
// This function sets the operation mode for PMIC backlight channel.
//
// Parameters:
// channel[IN] backlight channel
// mode[IN] backlight operation mode
//
// Returns:
// PMIC_STATUS.
//
//------------------------------------------------------------------------------
PMIC_STATUS PmicBacklightSetMode(BACKLIGHT_CHANNEL channel, BACKLIGHT_MODE mode)
{
PMIC_PARAM_LLA_WRITE_REG param;
DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));
param.addr = MC13783_LED_CTL0_ADDR;
switch (channel)
{
case BACKLIGHT_MAIN_DISPLAY:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_TRIODEMD, mode);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_TRIODEMD);
break;
case BACKLIGHT_AUX_DISPLAY:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_TRIODEAD, mode);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_TRIODEAD);
break;
case BACKLIGHT_KEYPAD:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_TRIODEKP, mode);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_TRIODEKP);
break;
}
if(! DeviceIoControl(hPMI, PMIC_IOCTL_LLA_WRITE_REG, ¶m,
sizeof(param), NULL, 0, NULL, NULL))
return PMIC_ERROR;
DEBUGMSG(ZONE_FUNC, (TEXT("-%s()\r\n"), __WFUNCTION__));
return PMIC_SUCCESS;
}
//------------------------------------------------------------------------------
//
// Function: PmicBacklightGetMode
//
// This function sets the operation mode for PMIC backlight channel.
//
// Parameters:
// channel[IN] backlight channel
// mode[OUT] pointer to backlight operation mode
//
// Returns:
// PMIC_STATUS.
//
//------------------------------------------------------------------------------
PMIC_STATUS PmicBacklightGetMode(BACKLIGHT_CHANNEL channel, BACKLIGHT_MODE *mode)
{
PMIC_PARAM_LLA_WRITE_REG param;
UINT32 temp;
DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));
param.addr = MC13783_LED_CTL0_ADDR;
param.data = 0;
param.mask = 0;
if(! DeviceIoControl(hPMI, PMIC_IOCTL_LLA_READ_REG, ¶m,
sizeof(param), &temp, sizeof(temp), NULL, NULL))
return PMIC_ERROR;
switch (channel)
{
case BACKLIGHT_MAIN_DISPLAY:
*mode = (BACKLIGHT_MODE)CSP_BITFEXT(temp, MC13783_LED_CTL0_TRIODEMD);
break;
case BACKLIGHT_AUX_DISPLAY:
*mode = (BACKLIGHT_MODE)CSP_BITFEXT(temp, MC13783_LED_CTL0_TRIODEAD);
break;
case BACKLIGHT_KEYPAD:
*mode = (BACKLIGHT_MODE)CSP_BITFEXT(temp, MC13783_LED_CTL0_TRIODEKP);
break;
}
DEBUGMSG(ZONE_FUNC, (TEXT("-%s()\r\n"), __WFUNCTION__));
return PMIC_SUCCESS;
}
//------------------------------------------------------------------------------
//
// Function: PmicBacklightSetCurrentLevel
//
// This function program the current level for backlight channel.
//
// Parameters:
// channel[IN] backlight channel
// level[IN] current level
//
// Returns:
// PMIC_STATUS.
//
//------------------------------------------------------------------------------
PMIC_STATUS PmicBacklightSetCurrentLevel(BACKLIGHT_CHANNEL channel, UINT8 level)
{
PMIC_PARAM_LLA_WRITE_REG param;
DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));
// check current level parameter
if (level > MC13783_LED_MAX_BACKLIGHT_CURRENT_LEVEL)
{
ERRORMSG(1, (_T("PmicBacklightSetCurrentLevel Invalid Parameter\r\n")));
return PMIC_PARAMETER_ERROR;
}
param.addr = MC13783_LED_CTL2_ADDR;
switch (channel)
{
case BACKLIGHT_MAIN_DISPLAY:
param.data = CSP_BITFVAL(MC13783_LED_CTL2_LEDMD, level);
param.mask = CSP_BITFMASK(MC13783_LED_CTL2_LEDMD);
break;
case BACKLIGHT_AUX_DISPLAY:
param.data = CSP_BITFVAL(MC13783_LED_CTL2_LEDAD, level);
param.mask = CSP_BITFMASK(MC13783_LED_CTL2_LEDAD);
break;
case BACKLIGHT_KEYPAD:
param.data = CSP_BITFVAL(MC13783_LED_CTL2_LEDKP, level);
param.mask = CSP_BITFMASK(MC13783_LED_CTL2_LEDKP);
break;
}
if(! DeviceIoControl(hPMI, PMIC_IOCTL_LLA_WRITE_REG, ¶m,
sizeof(param), NULL, 0, NULL, NULL))
return PMIC_ERROR;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -