aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/extcon/extcon-max77693.c
diff options
context:
space:
mode:
authorChanwoo Choi <cw00.choi@samsung.com>2013-03-13 04:38:57 -0400
committerChanwoo Choi <cw00.choi@samsung.com>2013-03-13 04:38:57 -0400
commit0ec83bd2460ed6aed0e7f29f9e0633b054621c02 (patch)
tree627cbb4b0f49c978ae331a4bcd3fcb8839ebee39 /drivers/extcon/extcon-max77693.c
parent190d7cfc8632c10bfbfe756f882b6d9cfddfdf6a (diff)
extcon: max77693: Initialize register of MUIC device to bring up it without platform data
This patch set default value of MUIC register to bring up MUIC device. If user don't set some initial value for MUIC device through platform data, extcon-max77693 driver use 'default_init_data' to bring up base operation of MAX77693 MUIC device. Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com> Signed-off-by: Myungjoo Ham <myungjoo.ham@samsung.com>
Diffstat (limited to 'drivers/extcon/extcon-max77693.c')
-rw-r--r--drivers/extcon/extcon-max77693.c93
1 files changed, 68 insertions, 25 deletions
diff --git a/drivers/extcon/extcon-max77693.c b/drivers/extcon/extcon-max77693.c
index fea10624f3e5..8f3c947b0029 100644
--- a/drivers/extcon/extcon-max77693.c
+++ b/drivers/extcon/extcon-max77693.c
@@ -32,6 +32,38 @@
32#define DEV_NAME "max77693-muic" 32#define DEV_NAME "max77693-muic"
33#define DELAY_MS_DEFAULT 20000 /* unit: millisecond */ 33#define DELAY_MS_DEFAULT 20000 /* unit: millisecond */
34 34
35/*
36 * Default value of MAX77693 register to bring up MUIC device.
37 * If user don't set some initial value for MUIC device through platform data,
38 * extcon-max77693 driver use 'default_init_data' to bring up base operation
39 * of MAX77693 MUIC device.
40 */
41struct max77693_reg_data default_init_data[] = {
42 {
43 /* STATUS2 - [3]ChgDetRun */
44 .addr = MAX77693_MUIC_REG_STATUS2,
45 .data = STATUS2_CHGDETRUN_MASK,
46 }, {
47 /* INTMASK1 - Unmask [3]ADC1KM,[0]ADCM */
48 .addr = MAX77693_MUIC_REG_INTMASK1,
49 .data = INTMASK1_ADC1K_MASK
50 | INTMASK1_ADC_MASK,
51 }, {
52 /* INTMASK2 - Unmask [0]ChgTypM */
53 .addr = MAX77693_MUIC_REG_INTMASK2,
54 .data = INTMASK2_CHGTYP_MASK,
55 }, {
56 /* INTMASK3 - Mask all of interrupts */
57 .addr = MAX77693_MUIC_REG_INTMASK3,
58 .data = 0x0,
59 }, {
60 /* CDETCTRL2 */
61 .addr = MAX77693_MUIC_REG_CDETCTRL2,
62 .data = CDETCTRL2_VIDRMEN_MASK
63 | CDETCTRL2_DXOVPEN_MASK,
64 },
65};
66
35enum max77693_muic_adc_debounce_time { 67enum max77693_muic_adc_debounce_time {
36 ADC_DEBOUNCE_TIME_5MS = 0, 68 ADC_DEBOUNCE_TIME_5MS = 0,
37 ADC_DEBOUNCE_TIME_10MS, 69 ADC_DEBOUNCE_TIME_10MS,
@@ -1046,6 +1078,8 @@ static int max77693_muic_probe(struct platform_device *pdev)
1046 struct max77693_dev *max77693 = dev_get_drvdata(pdev->dev.parent); 1078 struct max77693_dev *max77693 = dev_get_drvdata(pdev->dev.parent);
1047 struct max77693_platform_data *pdata = dev_get_platdata(max77693->dev); 1079 struct max77693_platform_data *pdata = dev_get_platdata(max77693->dev);
1048 struct max77693_muic_info *info; 1080 struct max77693_muic_info *info;
1081 struct max77693_reg_data *init_data;
1082 int num_init_data;
1049 int delay_jiffies; 1083 int delay_jiffies;
1050 int ret; 1084 int ret;
1051 int i; 1085 int i;
@@ -1144,35 +1178,44 @@ static int max77693_muic_probe(struct platform_device *pdev)
1144 goto err_irq; 1178 goto err_irq;
1145 } 1179 }
1146 1180
1181
1182 /* Initialize MUIC register by using platform data or default data */
1147 if (pdata->muic_data) { 1183 if (pdata->muic_data) {
1148 struct max77693_muic_platform_data *muic_pdata = pdata->muic_data; 1184 init_data = pdata->muic_data->init_data;
1185 num_init_data = pdata->muic_data->num_init_data;
1186 } else {
1187 init_data = default_init_data;
1188 num_init_data = ARRAY_SIZE(default_init_data);
1189 }
1190
1191 for (i = 0 ; i < num_init_data ; i++) {
1192 enum max77693_irq_source irq_src
1193 = MAX77693_IRQ_GROUP_NR;
1149 1194
1150 /* Initialize MUIC register by using platform data */ 1195 max77693_write_reg(info->max77693->regmap_muic,
1151 for (i = 0 ; i < muic_pdata->num_init_data ; i++) { 1196 init_data[i].addr,
1152 enum max77693_irq_source irq_src 1197 init_data[i].data);
1153 = MAX77693_IRQ_GROUP_NR; 1198
1154 1199 switch (init_data[i].addr) {
1155 max77693_write_reg(info->max77693->regmap_muic, 1200 case MAX77693_MUIC_REG_INTMASK1:
1156 muic_pdata->init_data[i].addr, 1201 irq_src = MUIC_INT1;
1157 muic_pdata->init_data[i].data); 1202 break;
1158 1203 case MAX77693_MUIC_REG_INTMASK2:
1159 switch (muic_pdata->init_data[i].addr) { 1204 irq_src = MUIC_INT2;
1160 case MAX77693_MUIC_REG_INTMASK1: 1205 break;
1161 irq_src = MUIC_INT1; 1206 case MAX77693_MUIC_REG_INTMASK3:
1162 break; 1207 irq_src = MUIC_INT3;
1163 case MAX77693_MUIC_REG_INTMASK2: 1208 break;
1164 irq_src = MUIC_INT2;
1165 break;
1166 case MAX77693_MUIC_REG_INTMASK3:
1167 irq_src = MUIC_INT3;
1168 break;
1169 }
1170
1171 if (irq_src < MAX77693_IRQ_GROUP_NR)
1172 info->max77693->irq_masks_cur[irq_src]
1173 = muic_pdata->init_data[i].data;
1174 } 1209 }
1175 1210
1211 if (irq_src < MAX77693_IRQ_GROUP_NR)
1212 info->max77693->irq_masks_cur[irq_src]
1213 = init_data[i].data;
1214 }
1215
1216 if (pdata->muic_data) {
1217 struct max77693_muic_platform_data *muic_pdata = pdata->muic_data;
1218
1176 /* 1219 /*
1177 * Default usb/uart path whether UART/USB or AUX_UART/AUX_USB 1220 * Default usb/uart path whether UART/USB or AUX_UART/AUX_USB
1178 * h/w path of COMP2/COMN1 on CONTROL1 register. 1221 * h/w path of COMP2/COMN1 on CONTROL1 register.