leds: leds-qpnp-wled: remove IBB/LAB initialization and operations

Remove IBB/LAB initialization and operations, as IBB/LAB for display
panel is set by PMIC

CRs Fixed: 857820
Change-Id: I3b345275fbe6e8d185d4d24ea8a30cccd36bf68b
Signed-off-by: Jigarkumar Kishorkumar Zala <j_zala@codeaurora.org>
This commit is contained in:
Jigarkumar Kishorkumar Zala 2015-06-25 14:16:09 -07:00 committed by Gerrit - the friendly Code Review server
parent 3e75ef89ce
commit 43f9af7e74
2 changed files with 0 additions and 206 deletions

View File

@ -41,10 +41,6 @@ Optional properties for WLED:
- qcom,en-9b-dim-res : boolean, specify if 9-bit dim resultion is needed. otherwise 12-bit is used.
- qcom,en-phase-stag : boolean, specify if phase staggering is needed.
- qcom,en-cabc : boolean, specify if cabc (content adaptive backlight control) is needed.
- qcom,ibb-bias-active : boolean, specify to activate the bias
- qcom,ibb-pwrup-dly : ibb power up delay in milli seconds. The supported values are 1 to 8.
default is 1.
- qcom,lab-fast-precharge: boolean, specify to activate the fast precharge
- qcom,disp-type-amoled : specify if the display is amoled
- qcom,led-strings-list : Wled module has four strings of leds numbered from 0 to 3. each string of leds
are operated individually. specify the list of strings used by the device.
@ -82,7 +78,6 @@ Example:
qcom,sync-dly-us = <800>;
qcom,fs-curr-ua = <16000>;
qcom,en-phase-stag;
qcom,ibb-pwrup-dly = <8>;
qcom,led-strings-list = [00 01 02 03];
qcom,en-ext-pfet-sc-pro;
};

View File

@ -30,8 +30,6 @@
/* base addresses */
#define QPNP_WLED_CTRL_BASE "qpnp-wled-ctrl-base"
#define QPNP_WLED_SINK_BASE "qpnp-wled-sink-base"
#define QPNP_WLED_IBB_BASE "qpnp-wled-ibb-base"
#define QPNP_WLED_LAB_BASE "qpnp-wled-lab-base"
/* ctrl registers */
#define QPNP_WLED_EN_REG(b) (b + 0x46)
@ -145,20 +143,6 @@
#define QPNP_WLED_EN_SC_SHIFT 7
#define QPNP_WLED_EXT_FET_DTEST2 0x09
#define QPNP_WLED_IBB_BIAS_REG(b) (b + 0x58)
#define QPNP_WLED_IBB_BIAS_MASK 0x7F
#define QPNP_WLED_IBB_BIAS_SHIFT 7
#define QPNP_WLED_IBB_PWRUP_DLY_MASK 0xCF
#define QPNP_WLED_IBB_PWRUP_DLY_SHIFT 4
#define QPNP_WLED_IBB_PWRUP_DLY_MIN_MS 1
#define QPNP_WLED_IBB_PWRUP_DLY_MAX_MS 8
#define QPNP_WLED_LAB_IBB_RDY_REG(b) (b + 0x49)
#define QPNP_WLED_LAB_FAST_PC_REG(b) (b + 0x5E)
#define QPNP_WLED_LAB_FAST_PC_MASK 0xFB
#define QPNP_WLED_LAB_START_DLY_US 8
#define QPNP_WLED_LAB_FAST_PC_SHIFT 2
#define QPNP_WLED_SEC_ACCESS_REG(b) (b + 0xD0)
#define QPNP_WLED_SEC_UNLOCK 0xA5
@ -202,16 +186,6 @@ static u8 qpnp_wled_sink_dbg_regs[] = {
0xe6,
};
/* wled ibb debug registers */
static u8 qpnp_wled_ibb_dbg_regs[] = {
0x08, 0x09, 0x0A, 0x44, 0x45, 0x46, 0x50, 0x53, 0x56, 0x57, 0x58, 0x61
};
/* wled lab debug registers */
static u8 qpnp_wled_lab_dbg_regs[] = {
0x08, 0x44, 0x45, 0x46, 0x49, 0x5e
};
/**
* qpnp_wled - wed data structure
* @ cdev - led class device
@ -261,8 +235,6 @@ struct qpnp_wled {
u32 sc_cnt;
u16 ctrl_base;
u16 sink_base;
u16 ibb_base;
u16 lab_base;
u16 mod_freq_khz;
u16 hyb_thres;
u16 sync_dly_us;
@ -272,7 +244,6 @@ struct qpnp_wled {
u16 ilim_ma;
u16 boost_duty_ns;
u16 fs_curr_ua;
u16 ibb_pwrup_dly_ms;
u16 ramp_ms;
u16 ramp_step;
u16 cons_sync_write_delay_us;
@ -282,13 +253,9 @@ struct qpnp_wled {
bool en_phase_stag;
bool en_cabc;
bool disp_type_amoled;
bool ibb_bias_active;
bool lab_fast_precharge;
bool en_ext_pfet_sc_pro;
};
static struct qpnp_wled *gwled;
/* helper to read a pmic register */
static int qpnp_wled_read_reg(struct qpnp_wled *wled, u8 *data, u16 addr)
{
@ -520,18 +487,6 @@ static ssize_t qpnp_wled_dump_regs_show(struct device *dev,
if (count < 0 || count == PAGE_SIZE - 1)
return count;
count = qpnp_wled_dump_regs(wled, wled->ibb_base,
qpnp_wled_ibb_dbg_regs,
ARRAY_SIZE(qpnp_wled_ibb_dbg_regs),
"wled_ibb", count, buf);
if (count < 0 || count == PAGE_SIZE - 1)
return count;
count = qpnp_wled_dump_regs(wled, wled->lab_base,
qpnp_wled_lab_dbg_regs,
ARRAY_SIZE(qpnp_wled_lab_dbg_regs),
"wled_lab", count, buf);
return count;
}
@ -654,44 +609,6 @@ static ssize_t qpnp_wled_fs_curr_ua_show(struct device *dev,
return snprintf(buf, PAGE_SIZE, "%d\n", wled->fs_curr_ua);
}
int qpnp_ibb_enable(bool state)
{
int rc;
u8 reg;
if (!gwled) {
pr_err("%s: wled is not initialized yet\n", __func__);
return -EAGAIN;
}
/* enable lab */
if (gwled->ibb_bias_active) {
rc = qpnp_wled_module_en(gwled, gwled->lab_base, state);
if (rc < 0)
return rc;
usleep_range(QPNP_WLED_LAB_START_DLY_US,
QPNP_WLED_LAB_START_DLY_US + 1);
} else {
rc = qpnp_wled_read_reg(gwled, &reg,
QPNP_WLED_LAB_IBB_RDY_REG(gwled->lab_base));
if (rc < 0)
return rc;
reg &= QPNP_WLED_MODULE_EN_MASK;
reg |= (state << QPNP_WLED_MODULE_EN_SHIFT);
rc = qpnp_wled_write_reg(gwled, &reg,
QPNP_WLED_LAB_IBB_RDY_REG(gwled->lab_base));
if (rc)
return rc;
}
rc = qpnp_wled_module_en(gwled, gwled->ibb_base, state);
if (rc < 0)
return rc;
return 0;
}
EXPORT_SYMBOL(qpnp_ibb_enable);
/* sysfs store function for full scale current in ua*/
static ssize_t qpnp_wled_fs_curr_ua_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t count)
@ -822,11 +739,6 @@ static int qpnp_wled_set_disp(struct qpnp_wled *wled, u16 base_addr)
reg &= QPNP_WLED_DISP_SEL_MASK;
reg |= (wled->disp_type_amoled << QPNP_WLED_DISP_SEL_SHIFT);
rc = qpnp_wled_sec_access(wled, base_addr);
if (rc)
return rc;
rc = qpnp_wled_write_reg(wled, &reg,
QPNP_WLED_DISP_SEL_REG(base_addr));
if (rc)
@ -835,25 +747,6 @@ static int qpnp_wled_set_disp(struct qpnp_wled *wled, u16 base_addr)
return 0;
}
static int qpnp_wled_mod_rdy(struct qpnp_wled *wled, u16 base_addr, bool state)
{
int rc;
u8 reg;
rc = qpnp_wled_read_reg(wled, &reg,
QPNP_WLED_MODULE_RDY_REG(base_addr));
if (rc < 0)
return rc;
reg &= QPNP_WLED_MODULE_RDY_MASK;
reg |= (state << QPNP_WLED_MODULE_RDY_SHIFT);
rc = qpnp_wled_write_reg(wled, &reg,
QPNP_WLED_MODULE_RDY_REG(base_addr));
if (rc)
return rc;
return 0;
}
/* ovp irq handler */
static irqreturn_t qpnp_wled_ovp_irq(int irq, void *_wled)
{
@ -1181,64 +1074,6 @@ static int qpnp_wled_config(struct qpnp_wled *wled)
return rc;
}
/* LAB fast precharge */
rc = qpnp_wled_read_reg(wled, &reg,
QPNP_WLED_LAB_FAST_PC_REG(wled->lab_base));
if (rc < 0)
return rc;
reg &= QPNP_WLED_LAB_FAST_PC_MASK;
reg |= (wled->lab_fast_precharge << QPNP_WLED_LAB_FAST_PC_SHIFT);
rc = qpnp_wled_write_reg(wled, &reg,
QPNP_WLED_LAB_FAST_PC_REG(wled->lab_base));
if (rc)
return rc;
/* Configure lab display type */
rc = qpnp_wled_set_disp(wled, wled->lab_base);
if (rc < 0)
return rc;
/* make LAB module ready */
rc = qpnp_wled_mod_rdy(wled, wled->lab_base, true);
if (rc < 0)
return rc;
/* IBB active bias */
if (wled->ibb_pwrup_dly_ms < QPNP_WLED_IBB_PWRUP_DLY_MIN_MS)
wled->ibb_pwrup_dly_ms = QPNP_WLED_IBB_PWRUP_DLY_MIN_MS;
else if (wled->ibb_pwrup_dly_ms > QPNP_WLED_IBB_PWRUP_DLY_MAX_MS)
wled->ibb_pwrup_dly_ms = QPNP_WLED_IBB_PWRUP_DLY_MAX_MS;
rc = qpnp_wled_read_reg(wled, &reg,
QPNP_WLED_IBB_BIAS_REG(wled->ibb_base));
if (rc < 0)
return rc;
reg &= QPNP_WLED_IBB_BIAS_MASK;
reg |= (!wled->ibb_bias_active << QPNP_WLED_IBB_BIAS_SHIFT);
temp = fls(wled->ibb_pwrup_dly_ms) - 1;
reg &= QPNP_WLED_IBB_PWRUP_DLY_MASK;
reg |= (temp << QPNP_WLED_IBB_PWRUP_DLY_SHIFT);
rc = qpnp_wled_sec_access(wled, wled->ibb_base);
if (rc)
return rc;
rc = qpnp_wled_write_reg(wled, &reg,
QPNP_WLED_IBB_BIAS_REG(wled->ibb_base));
if (rc)
return rc;
/* Configure ibb display type */
rc = qpnp_wled_set_disp(wled, wled->ibb_base);
if (rc < 0)
return rc;
/* make IBB module ready */
rc = qpnp_wled_mod_rdy(wled, wled->ibb_base, true);
if (rc < 0)
return rc;
/* setup ovp and sc irqs */
if (wled->ovp_irq >= 0) {
rc = devm_request_threaded_irq(&wled->spmi->dev, wled->ovp_irq,
@ -1472,22 +1307,6 @@ static int qpnp_wled_parse_dt(struct qpnp_wled *wled)
memcpy(wled->strings, prop->value, temp_val);
}
wled->ibb_bias_active = of_property_read_bool(spmi->dev.of_node,
"qcom,ibb-bias-active");
wled->ibb_pwrup_dly_ms = QPNP_WLED_IBB_PWRUP_DLY_MIN_MS;
rc = of_property_read_u32(spmi->dev.of_node,
"qcom,ibb-pwrup-dly", &temp_val);
if (!rc) {
wled->ibb_pwrup_dly_ms = temp_val;
} else if (rc != -EINVAL) {
dev_err(&spmi->dev, "Unable to read ibb pwrup delay\n");
return rc;
}
wled->lab_fast_precharge = of_property_read_bool(spmi->dev.of_node,
"qcom,lab-fast-precharge");
wled->ovp_irq = spmi_get_irq_byname(spmi, NULL, "ovp-irq");
if (wled->ovp_irq < 0)
dev_dbg(&spmi->dev, "ovp irq is not used\n");
@ -1532,24 +1351,6 @@ static int qpnp_wled_probe(struct spmi_device *spmi)
wled->ctrl_base = wled_resource->start;
wled_resource = spmi_get_resource_byname(spmi, NULL, IORESOURCE_MEM,
QPNP_WLED_IBB_BASE);
if (!wled_resource) {
dev_err(&spmi->dev, "Unable to get IBB base address\n");
return -EINVAL;
}
wled->ibb_base = wled_resource->start;
wled_resource = spmi_get_resource_byname(spmi, NULL, IORESOURCE_MEM,
QPNP_WLED_LAB_BASE);
if (!wled_resource) {
dev_err(&spmi->dev, "Unable to get LAB base address\n");
return -EINVAL;
}
wled->lab_base = wled_resource->start;
dev_set_drvdata(&spmi->dev, wled);
rc = qpnp_wled_parse_dt(wled);
@ -1589,8 +1390,6 @@ static int qpnp_wled_probe(struct spmi_device *spmi)
}
}
gwled = wled;
return 0;
sysfs_fail: