blob: 5ed7bd5fe2f12689cb7af39a4bb0475bcd9777a4 [file] [log] [blame]
/*
* (C) Copyright 2013 Samsung Electronics Co. Ltd
*
* See file CREDITS for list of people who contributed to this
* project.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
*/
#ifndef __PMIC_H__
#define __PMIC_H__
#define GPD1CON *(volatile unsigned long *)(0x114000C0)
#define GPD1DAT *(volatile unsigned long *)(0x114000C4)
#define GPD1PUD *(volatile unsigned long *)(0x114000C8)
#define IIC0_ESCL_Hi GPD1DAT |= (0x1<<1)
#define IIC0_ESCL_Lo GPD1DAT &= ~(0x1<<1)
#define IIC0_ESDA_Hi GPD1DAT |= (0x1<<0)
#define IIC0_ESDA_Lo GPD1DAT &= ~(0x1<<0)
#define IIC0_ESCL_INP GPD1CON &= ~(0xf<<4)
#define IIC0_ESCL_OUTP GPD1CON = (GPD1CON & ~(0xf<<4))|(0x1<<4)
#define IIC0_ESDA_INP GPD1CON &= ~(0xf<<0)
#define IIC0_ESDA_OUTP GPD1CON = (GPD1CON & ~(0xf<<0))|(0x1<<0)
#define DELAY 100
/* S5M8767 slave address */
#define S5M8767_WR_ADDR 0xCC
#define S5M8767_RD_ADDR 0xCD
#define VDD_BASE_VOLT 60000
#define VDD_VOLT_STEP 625
#define MIN_VOLT 600
#define MAX_RD_VAL 0xA0
#define RD_BUCK_VOLT(x) (((x > MAX_RD_VAL) ? 0 : \
((x * VDD_VOLT_STEP) + VDD_BASE_VOLT) / 100))
#define WR_BUCK_VOLT(x) ((x < MIN_VOLT) ? 0 : \
((((x) * 100) - VDD_BASE_VOLT) / VDD_VOLT_STEP))
/* RTC CTRL */
#define RTC_CTRL2 (0x1 << 4)
#define RTC_CTRL1 (0x1 << 3)
#define BT_32KHZ_EN (0x1 << 2)
#define CP_32KHZ_EN (0x1 << 1)
#define AP_32KHZ_EN (0x1 << 0)
/* S5M8767 Revision ID */
#define REV_00 0x00
#define REV_01 0x01
/* S5M8767 Register Address */
#define PMIC_ID 0x00
#define RTC_CTRL 0x0B
#define BUCK1_CTRL1 0x2D
#define BUCK1_CTRL2 0x2E
#define BUCK2_CTRL1 0x2F
#define BUCK2_CTRL2 0x30
#define BUCK3_CTRL1 0x31
#define BUCK3_CTRL2 0x32
#define BUCK4_CTRL1 0x33
#define BUCK4_CTRL2 0x34
#define BUCK5_CTRL1 0x35
#define BUCK5_CTRL2 0x36
#define CM_DUAL_TEST1 0x89
#define CM_SINGLE_TEST4 0x95
#define VMBUCK_ALL 0x9A
/* S5M8767 Register Address */
#define REV01_RTC_CTRL 0x0B
#define REV01_BUCK1_CTRL1 0x28
#define REV01_BUCK1_CTRL2 0x29
#define REV01_BUCK2_CTRL1 0x2A
#define REV01_BUCK2_CTRL2 0x2B
#define REV01_BUCK3_CTRL1 0x2C
#define REV01_BUCK3_CTRL2 0x2D
#define REV01_BUCK4_CTRL1 0x2E
#define REV01_BUCK4_CTRL2 0x2F
#define REV01_BUCK5_CTRL1 0x30
#define REV01_BUCK5_CTRL2 0x31
#define REV01_LDO33_CTRL 0x4B
#define REV01_LDO34_CTRL 0x4C
#define REV01_SELMIF 0x59
#define REV01_LDO29 0x47
#define REV01_LDO37 0x4F
/* LDO CTRL bit */
#define OFF (0x0)
#define ON (0x1)
#define OUTPUT_OFF (~(3 << 6))
#define OUTPUT_PWREN_ON (1 << 6)
#define OUTPUT_LOWPWR_MODE (2 << 6)
#define OUTPUT_NORMAL_MODE (3 << 6)
/* SELMIF bit */
#define SELMIF_BUCK1 (1 << 0)
#define SELMIF_LDO2 (1 << 1)
#define SELMIF_LDO5 (1 << 2)
#define SELMIF_LDO6 (1 << 3)
/* CM_DUAL_TEST1 bit */
#define CM_DT1_PROTECT_EN (1 << 7)
#define CM_DT1_DVS_PFM_EN (1 << 6)
#define CM_DT1_TEMP_SELB (1 << 5)
#define CM_DT1_H2L (1 << 4)
#define CM_DT1_ZERO_VOSTEP (1 << 3)
#define CM_DT1_DVS_FPWM (1 << 2)
#define CM_DT1_PCLK_DLY_EN (1 << 1)
#define CM_DT1_PWMVTHL_DNB (1 << 0)
/* CM_SINGLE_TEST4 bit */
#define CM_ST4_RS_PMUP_EN (1 << 7)
#define CM_ST4_OVP_EN (1 << 6)
#define CM_ST4_DVS_FPWM (1 << 5)
#define CM_ST4_CAP_ADD_FB (1 << 4)
#define CM_ST4_PROTECT_EN (1 << 3)
#define CM_ST4_PON_USE (1 << 2)
#define CM_ST4_PFMVTH_DNB_PNOFF (1 << 1)
#define CM_ST4_PFM_MIN_EN (1 << 0)
/* VMBUCK_ALL bit */
#define VMBUCK_ALL_EN_DSCHG_DVS_DN (1 << 7)
#define VMBUCK_ALL_PFM_VTH_DNB_PNOFF (1 << 6)
#define VMBUCK_ALL_PWMVTHH_UPB (1 << 5)
#define VMBUCK_ALL_PWMVTHL_DNB (1 << 4)
#define VMBUCK_ALL_PFMCALSEL (1 << 3)
#define VMBUCK_ALL_MINOFF_EN (1 << 2)
#define VMBUCK_ALL_ADDC (1 << 1)
#define VMBUCK_ALL_EN_PWM_DVS_DN (1 << 0)
extern void pmic_init(void);
extern void IIC0_ERead(unsigned char ChipId,
unsigned char IicAddr, unsigned char *IicData);
extern void IIC0_EWrite(unsigned char ChipId,
unsigned char IicAddr, unsigned char IicData);
#endif /*__PMIC_H__*/