📄 pmic_tcled.cpp
字号:
//-----------------------------------------------------------------------------
//
// Copyright (C) 2005, 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_tcled.cpp
//
// This file contains the PMIC TCLED 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_tcled.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: PmicTCLEDEnable
//
// This function enables the Tri-Colour LED operation mode.
//
// Parameters:
// mode [in] : operational mode for Tri-Color LED
// bank[in] : Selected tri-color bank
//
// Returns:
// PMIC_STATUS.
//
//------------------------------------------------------------------------------
PMIC_STATUS PmicTCLEDEnable(TCLED_MODE mode, FUNLIGHT_BANK bank)
{
PMIC_PARAM_LLA_WRITE_REG param;
DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));
param.addr = MC13783_LED_CTL0_ADDR;
switch(mode)
{
case TCLED_FUN_MODE:
switch(bank)
{
case TCLED_FUN_BANK1:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_FLBANK1,
MC13783_LED_CTL0_FLBANK_ENABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_FLBANK1);
break;
case TCLED_FUN_BANK2:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_FLBANK2,
MC13783_LED_CTL0_FLBANK_ENABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_FLBANK2);
break;
case TCLED_FUN_BANK3:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_FLBANK3,
MC13783_LED_CTL0_FLBANK_ENABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_FLBANK3);
break;
}
break;
case TCLED_IND_MODE:
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_FLBANK1) |
CSP_BITFMASK(MC13783_LED_CTL0_FLBANK2) |
CSP_BITFMASK(MC13783_LED_CTL0_FLBANK3);
param.data = CSP_BITFVAL(MC13783_LED_CTL0_FLBANK1,
MC13783_LED_CTL0_FLBANK_DISABLE) |
CSP_BITFVAL(MC13783_LED_CTL0_FLBANK2,
MC13783_LED_CTL0_FLBANK_DISABLE) |
CSP_BITFVAL(MC13783_LED_CTL0_FLBANK3,
MC13783_LED_CTL0_FLBANK_DISABLE);
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: PmicTCLEDDisable
//
// This function disables the Tri-Color LED operation mode.
//
// Parameters:
// bank[in] : Selected tri-color bank
//
// Returns:
// PMIC_STATUS.
//
//-----------------------------------------------------------------------------
PMIC_STATUS PmicTCLEDDisable(FUNLIGHT_BANK bank)
{
PMIC_PARAM_LLA_WRITE_REG param;
DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));
param.addr = MC13783_LED_CTL0_ADDR;
switch(bank)
{
case TCLED_FUN_BANK1:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_FLBANK1,
MC13783_LED_CTL0_FLBANK_DISABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_FLBANK1);
break;
case TCLED_FUN_BANK2:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_FLBANK2,
MC13783_LED_CTL0_FLBANK_DISABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_FLBANK2);
break;
case TCLED_FUN_BANK3:
param.data = CSP_BITFVAL(MC13783_LED_CTL0_FLBANK3,
MC13783_LED_CTL0_FLBANK_DISABLE);
param.mask = CSP_BITFMASK(MC13783_LED_CTL0_FLBANK3);
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: PmicTCLEDGetMode
//
// This function retrieves the Tri-Color LED operation mode.
//
// Parameters:
// mode [out] : pointer to operational mode for Tri-Color LED
// bank[in] : Selected tri-color bank
//
// Returns:
// PMIC_STATUS.
//
//-----------------------------------------------------------------------------
PMIC_STATUS PmicTCLEDGetMode(TCLED_MODE *mode, FUNLIGHT_BANK bank)
{
PMIC_PARAM_LLA_WRITE_REG param = {0};
UINT32 temp;
DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));
param.addr = MC13783_LED_CTL0_ADDR;
if(!DeviceIoControl(hPMI, PMIC_IOCTL_LLA_READ_REG, ¶m, sizeof(param),
&temp, sizeof(temp), NULL, NULL))
{
return PMIC_ERROR;
}
switch(bank)
{
case TCLED_FUN_BANK1:
temp = CSP_BITFEXT(temp, MC13783_LED_CTL0_FLBANK1);
break;
case TCLED_FUN_BANK2:
temp = CSP_BITFEXT(temp, MC13783_LED_CTL0_FLBANK3);
break;
case TCLED_FUN_BANK3:
temp = CSP_BITFEXT(temp, MC13783_LED_CTL0_FLBANK3);
break;
}
if (temp == MC13783_LED_CTL0_FLBANK_ENABLE)
{
*mode = TCLED_FUN_MODE;
}
else
{
*mode = TCLED_IND_MODE;
}
DEBUGMSG(ZONE_FUNC, (TEXT("-%s()\r\n"), __WFUNCTION__));
return PMIC_SUCCESS;
}
//-----------------------------------------------------------------------------
//
// Function: PmicTCLEDFunLightSetCurrentLevel
//
// This function sets the current level when Tri-Color LED is operating in
// fun light mode.
//
// Parameters:
// bank
// [in] bank.
// channel
// [in] channel.
// level
// [in] current level.
//
// Returns:
// PMIC_STATUS.
//
//-----------------------------------------------------------------------------
PMIC_STATUS PmicTCLEDFunLightSetCurrentLevel(FUNLIGHT_BANK bank, FUNLIGHT_CHANNEL channel, TCLED_CUR_LEVEL level)
{
PMIC_PARAM_LLA_WRITE_REG param;
DEBUGMSG(ZONE_FUNC, (TEXT("+%s()\r\n"), __WFUNCTION__));
if (level > MC13783_MAX_FUNLIGHT_CURRENT_LEVEL)
{
DEBUGMSG(ZONE_ERROR, (_T("PmicTCLEDIndicatorSetCurrentLevel: ")
_T("Invalid Parameter\r\n")));
return PMIC_PARAMETER_ERROR;
}
switch(bank)
{
case TCLED_FUN_BANK1:
switch(channel)
{
case TCLED_FUN_CHANNEL1:
param.data = CSP_BITFVAL(MC13783_LED_CTL3_LEDR1, level);
param.mask = CSP_BITFMASK(MC13783_LED_CTL3_LEDR1);
break;
case TCLED_FUN_CHANNEL2:
param.data = CSP_BITFVAL(MC13783_LED_CTL3_LEDG1, level);
param.mask = CSP_BITFMASK(MC13783_LED_CTL3_LEDG1);
break;
case TCLED_FUN_CHANNEL3:
param.data = CSP_BITFVAL(MC13783_LED_CTL3_LEDB1, level);
param.mask = CSP_BITFMASK(MC13783_LED_CTL3_LEDB1);
break;
}
param.addr = MC13783_LED_CTL3_ADDR;
break;
case TCLED_FUN_BANK2:
switch(channel)
{
case TCLED_FUN_CHANNEL1:
param.data = CSP_BITFVAL(MC13783_LED_CTL4_LEDR2, level);
param.mask = CSP_BITFMASK(MC13783_LED_CTL4_LEDR2);
break;
case TCLED_FUN_CHANNEL2:
param.data = CSP_BITFVAL(MC13783_LED_CTL4_LEDG2, level);
param.mask = CSP_BITFMASK(MC13783_LED_CTL4_LEDG2);
break;
case TCLED_FUN_CHANNEL3:
param.data = CSP_BITFVAL(MC13783_LED_CTL4_LEDB2, level);
param.mask = CSP_BITFMASK(MC13783_LED_CTL4_LEDB2);
break;
}
param.addr = MC13783_LED_CTL4_ADDR;
break;
case TCLED_FUN_BANK3:
switch(channel)
{
case TCLED_FUN_CHANNEL1:
param.data = CSP_BITFVAL(MC13783_LED_CTL5_LEDR3, level);
param.mask = CSP_BITFMASK(MC13783_LED_CTL5_LEDR3);
break;
case TCLED_FUN_CHANNEL2:
param.data = CSP_BITFVAL(MC13783_LED_CTL5_LEDG3, level);
param.mask = CSP_BITFMASK(MC13783_LED_CTL5_LEDG3);
break;
case TCLED_FUN_CHANNEL3:
param.data = CSP_BITFVAL(MC13783_LED_CTL5_LEDB3, level);
param.mask = CSP_BITFMASK(MC13783_LED_CTL5_LEDB3);
break;
}
param.addr = MC13783_LED_CTL5_ADDR;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -