⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pmic_bklight.cpp

📁 i.mx27 soc for wince 6.0
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//-----------------------------------------------------------------------------
//
//  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, &param,
              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, &param,
              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, &param,
              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, &param,
              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, &param,
              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, &param,
              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, &param,
              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, &param,
              sizeof(param), NULL, 0, NULL, NULL))
        return PMIC_ERROR;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -