Lines Matching refs:bgp

56 static u32 ti_bandgap_readl(struct ti_bandgap *bgp, u32 reg)  in ti_bandgap_readl()  argument
58 return readl(bgp->base + reg); in ti_bandgap_readl()
69 static void ti_bandgap_writel(struct ti_bandgap *bgp, u32 val, u32 reg) in ti_bandgap_writel() argument
71 writel(val, bgp->base + reg); in ti_bandgap_writel()
80 #define RMW_BITS(bgp, id, reg, mask, val) \ argument
85 t = bgp->conf->sensors[(id)].registers; \
86 r = ti_bandgap_readl(bgp, t->reg); \
89 ti_bandgap_writel(bgp, r, t->reg); \
104 static int ti_bandgap_power(struct ti_bandgap *bgp, bool on) in ti_bandgap_power() argument
108 if (!TI_BANDGAP_HAS(bgp, POWER_SWITCH)) { in ti_bandgap_power()
113 for (i = 0; i < bgp->conf->sensor_count; i++) in ti_bandgap_power()
115 RMW_BITS(bgp, i, temp_sensor_ctrl, bgap_tempsoff_mask, !on); in ti_bandgap_power()
137 static u32 ti_errata814_bandgap_read_temp(struct ti_bandgap *bgp, u32 reg) in ti_errata814_bandgap_read_temp() argument
141 val1 = ti_bandgap_readl(bgp, reg); in ti_errata814_bandgap_read_temp()
142 val2 = ti_bandgap_readl(bgp, reg); in ti_errata814_bandgap_read_temp()
149 return ti_bandgap_readl(bgp, reg); in ti_errata814_bandgap_read_temp()
164 static u32 ti_bandgap_read_temp(struct ti_bandgap *bgp, int id) in ti_bandgap_read_temp() argument
169 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_read_temp()
172 if (TI_BANDGAP_HAS(bgp, FREEZE_BIT)) { in ti_bandgap_read_temp()
173 RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 1); in ti_bandgap_read_temp()
182 if (TI_BANDGAP_HAS(bgp, ERRATA_814)) in ti_bandgap_read_temp()
183 temp = ti_errata814_bandgap_read_temp(bgp, reg); in ti_bandgap_read_temp()
185 temp = ti_bandgap_readl(bgp, reg); in ti_bandgap_read_temp()
189 if (TI_BANDGAP_HAS(bgp, FREEZE_BIT)) in ti_bandgap_read_temp()
190 RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 0); in ti_bandgap_read_temp()
212 struct ti_bandgap *bgp = data; in ti_bandgap_talert_irq_handler() local
217 spin_lock(&bgp->lock); in ti_bandgap_talert_irq_handler()
218 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_talert_irq_handler()
219 tsr = bgp->conf->sensors[i].registers; in ti_bandgap_talert_irq_handler()
220 ctrl = ti_bandgap_readl(bgp, tsr->bgap_status); in ti_bandgap_talert_irq_handler()
231 ctrl = ti_bandgap_readl(bgp, tsr->bgap_mask_ctrl); in ti_bandgap_talert_irq_handler()
245 ti_bandgap_writel(bgp, ctrl, tsr->bgap_mask_ctrl); in ti_bandgap_talert_irq_handler()
247 dev_dbg(bgp->dev, in ti_bandgap_talert_irq_handler()
249 __func__, bgp->conf->sensors[i].domain, in ti_bandgap_talert_irq_handler()
253 if (bgp->conf->report_temperature) in ti_bandgap_talert_irq_handler()
254 bgp->conf->report_temperature(bgp, i); in ti_bandgap_talert_irq_handler()
256 spin_unlock(&bgp->lock); in ti_bandgap_talert_irq_handler()
298 int ti_bandgap_adc_to_mcelsius(struct ti_bandgap *bgp, int adc_val, int *t) in ti_bandgap_adc_to_mcelsius() argument
300 const struct ti_bandgap_data *conf = bgp->conf; in ti_bandgap_adc_to_mcelsius()
309 *t = bgp->conf->conv_table[adc_val - conf->adc_start_val]; in ti_bandgap_adc_to_mcelsius()
329 int ti_bandgap_mcelsius_to_adc(struct ti_bandgap *bgp, long temp, int *adc) in ti_bandgap_mcelsius_to_adc() argument
331 const struct ti_bandgap_data *conf = bgp->conf; in ti_bandgap_mcelsius_to_adc()
332 const int *conv_table = bgp->conf->conv_table; in ti_bandgap_mcelsius_to_adc()
370 int ti_bandgap_add_hyst(struct ti_bandgap *bgp, int adc_val, int hyst_val, in ti_bandgap_add_hyst() argument
379 ret = ti_bandgap_adc_to_mcelsius(bgp, adc_val, &temp); in ti_bandgap_add_hyst()
385 ret = ti_bandgap_mcelsius_to_adc(bgp, temp, sum); in ti_bandgap_add_hyst()
403 static void ti_bandgap_unmask_interrupts(struct ti_bandgap *bgp, int id, in ti_bandgap_unmask_interrupts() argument
410 temp = ti_bandgap_read_temp(bgp, id); in ti_bandgap_unmask_interrupts()
412 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_unmask_interrupts()
413 reg_val = ti_bandgap_readl(bgp, tsr->bgap_mask_ctrl); in ti_bandgap_unmask_interrupts()
424 ti_bandgap_writel(bgp, reg_val, tsr->bgap_mask_ctrl); in ti_bandgap_unmask_interrupts()
443 static int ti_bandgap_update_alert_threshold(struct ti_bandgap *bgp, int id, in ti_bandgap_update_alert_threshold() argument
446 struct temp_sensor_data *ts_data = bgp->conf->sensors[id].ts_data; in ti_bandgap_update_alert_threshold()
451 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_update_alert_threshold()
454 thresh_val = ti_bandgap_readl(bgp, tsr->bgap_threshold); in ti_bandgap_update_alert_threshold()
466 err = ti_bandgap_add_hyst(bgp, t_hot, in ti_bandgap_update_alert_threshold()
470 err = ti_bandgap_add_hyst(bgp, t_cold, in ti_bandgap_update_alert_threshold()
495 if (TI_BANDGAP_HAS(bgp, ERRATA_813)) { in ti_bandgap_update_alert_threshold()
497 ctrl = ti_bandgap_readl(bgp, tsr->bgap_mask_ctrl); in ti_bandgap_update_alert_threshold()
504 ti_bandgap_writel(bgp, ctrl, tsr->bgap_mask_ctrl); in ti_bandgap_update_alert_threshold()
508 ti_bandgap_writel(bgp, reg_val, tsr->bgap_threshold); in ti_bandgap_update_alert_threshold()
510 if (TI_BANDGAP_HAS(bgp, ERRATA_813)) { in ti_bandgap_update_alert_threshold()
512 ctrl = ti_bandgap_readl(bgp, tsr->bgap_mask_ctrl); in ti_bandgap_update_alert_threshold()
518 ti_bandgap_writel(bgp, ctrl, tsr->bgap_mask_ctrl); in ti_bandgap_update_alert_threshold()
522 dev_err(bgp->dev, "failed to reprogram thot threshold\n"); in ti_bandgap_update_alert_threshold()
527 ti_bandgap_unmask_interrupts(bgp, id, t_hot, t_cold); in ti_bandgap_update_alert_threshold()
543 static inline int ti_bandgap_validate(struct ti_bandgap *bgp, int id) in ti_bandgap_validate() argument
547 if (!bgp || IS_ERR(bgp)) { in ti_bandgap_validate()
553 if ((id < 0) || (id >= bgp->conf->sensor_count)) { in ti_bandgap_validate()
554 dev_err(bgp->dev, "%s: sensor id out of range (%d)\n", in ti_bandgap_validate()
578 static int _ti_bandgap_write_threshold(struct ti_bandgap *bgp, int id, int val, in _ti_bandgap_write_threshold() argument
586 ret = ti_bandgap_validate(bgp, id); in _ti_bandgap_write_threshold()
590 if (!TI_BANDGAP_HAS(bgp, TALERT)) { in _ti_bandgap_write_threshold()
595 ts_data = bgp->conf->sensors[id].ts_data; in _ti_bandgap_write_threshold()
596 tsr = bgp->conf->sensors[id].registers; in _ti_bandgap_write_threshold()
608 ret = ti_bandgap_mcelsius_to_adc(bgp, val, &adc_val); in _ti_bandgap_write_threshold()
612 spin_lock(&bgp->lock); in _ti_bandgap_write_threshold()
613 ret = ti_bandgap_update_alert_threshold(bgp, id, adc_val, hot); in _ti_bandgap_write_threshold()
614 spin_unlock(&bgp->lock); in _ti_bandgap_write_threshold()
635 static int _ti_bandgap_read_threshold(struct ti_bandgap *bgp, int id, in _ti_bandgap_read_threshold() argument
642 ret = ti_bandgap_validate(bgp, id); in _ti_bandgap_read_threshold()
646 if (!TI_BANDGAP_HAS(bgp, TALERT)) { in _ti_bandgap_read_threshold()
651 tsr = bgp->conf->sensors[id].registers; in _ti_bandgap_read_threshold()
657 temp = ti_bandgap_readl(bgp, tsr->bgap_threshold); in _ti_bandgap_read_threshold()
659 ret |= ti_bandgap_adc_to_mcelsius(bgp, temp, &temp); in _ti_bandgap_read_threshold()
661 dev_err(bgp->dev, "failed to read thot\n"); in _ti_bandgap_read_threshold()
682 int ti_bandgap_read_thot(struct ti_bandgap *bgp, int id, int *thot) in ti_bandgap_read_thot() argument
684 return _ti_bandgap_read_threshold(bgp, id, thot, true); in ti_bandgap_read_thot()
695 int ti_bandgap_write_thot(struct ti_bandgap *bgp, int id, int val) in ti_bandgap_write_thot() argument
697 return _ti_bandgap_write_threshold(bgp, id, val, true); in ti_bandgap_write_thot()
708 int ti_bandgap_read_tcold(struct ti_bandgap *bgp, int id, int *tcold) in ti_bandgap_read_tcold() argument
710 return _ti_bandgap_read_threshold(bgp, id, tcold, false); in ti_bandgap_read_tcold()
721 int ti_bandgap_write_tcold(struct ti_bandgap *bgp, int id, int val) in ti_bandgap_write_tcold() argument
723 return _ti_bandgap_write_threshold(bgp, id, val, false); in ti_bandgap_write_tcold()
732 static void ti_bandgap_read_counter(struct ti_bandgap *bgp, int id, in ti_bandgap_read_counter() argument
738 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_read_counter()
739 time = ti_bandgap_readl(bgp, tsr->bgap_counter); in ti_bandgap_read_counter()
742 time = time * 1000 / bgp->clk_rate; in ti_bandgap_read_counter()
752 static void ti_bandgap_read_counter_delay(struct ti_bandgap *bgp, int id, in ti_bandgap_read_counter_delay() argument
758 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_read_counter_delay()
760 reg_val = ti_bandgap_readl(bgp, tsr->bgap_mask_ctrl); in ti_bandgap_read_counter_delay()
783 dev_warn(bgp->dev, "Wrong counter delay value read from register %X", in ti_bandgap_read_counter_delay()
796 int ti_bandgap_read_update_interval(struct ti_bandgap *bgp, int id, in ti_bandgap_read_update_interval() argument
801 ret = ti_bandgap_validate(bgp, id); in ti_bandgap_read_update_interval()
805 if (!TI_BANDGAP_HAS(bgp, COUNTER) && in ti_bandgap_read_update_interval()
806 !TI_BANDGAP_HAS(bgp, COUNTER_DELAY)) { in ti_bandgap_read_update_interval()
811 if (TI_BANDGAP_HAS(bgp, COUNTER)) { in ti_bandgap_read_update_interval()
812 ti_bandgap_read_counter(bgp, id, interval); in ti_bandgap_read_update_interval()
816 ti_bandgap_read_counter_delay(bgp, id, interval); in ti_bandgap_read_update_interval()
829 static int ti_bandgap_write_counter_delay(struct ti_bandgap *bgp, int id, in ti_bandgap_write_counter_delay() argument
854 dev_warn(bgp->dev, "Delay %d ms is not supported\n", interval); in ti_bandgap_write_counter_delay()
858 spin_lock(&bgp->lock); in ti_bandgap_write_counter_delay()
859 RMW_BITS(bgp, id, bgap_mask_ctrl, mask_counter_delay_mask, rval); in ti_bandgap_write_counter_delay()
860 spin_unlock(&bgp->lock); in ti_bandgap_write_counter_delay()
871 static void ti_bandgap_write_counter(struct ti_bandgap *bgp, int id, in ti_bandgap_write_counter() argument
874 interval = interval * bgp->clk_rate / 1000; in ti_bandgap_write_counter()
875 spin_lock(&bgp->lock); in ti_bandgap_write_counter()
876 RMW_BITS(bgp, id, bgap_counter, counter_mask, interval); in ti_bandgap_write_counter()
877 spin_unlock(&bgp->lock); in ti_bandgap_write_counter()
888 int ti_bandgap_write_update_interval(struct ti_bandgap *bgp, in ti_bandgap_write_update_interval() argument
891 int ret = ti_bandgap_validate(bgp, id); in ti_bandgap_write_update_interval()
895 if (!TI_BANDGAP_HAS(bgp, COUNTER) && in ti_bandgap_write_update_interval()
896 !TI_BANDGAP_HAS(bgp, COUNTER_DELAY)) { in ti_bandgap_write_update_interval()
901 if (TI_BANDGAP_HAS(bgp, COUNTER)) { in ti_bandgap_write_update_interval()
902 ti_bandgap_write_counter(bgp, id, interval); in ti_bandgap_write_update_interval()
906 ret = ti_bandgap_write_counter_delay(bgp, id, interval); in ti_bandgap_write_update_interval()
919 int ti_bandgap_read_temperature(struct ti_bandgap *bgp, int id, in ti_bandgap_read_temperature() argument
925 ret = ti_bandgap_validate(bgp, id); in ti_bandgap_read_temperature()
929 spin_lock(&bgp->lock); in ti_bandgap_read_temperature()
930 temp = ti_bandgap_read_temp(bgp, id); in ti_bandgap_read_temperature()
931 spin_unlock(&bgp->lock); in ti_bandgap_read_temperature()
933 ret |= ti_bandgap_adc_to_mcelsius(bgp, temp, &temp); in ti_bandgap_read_temperature()
951 int ti_bandgap_set_sensor_data(struct ti_bandgap *bgp, int id, void *data) in ti_bandgap_set_sensor_data() argument
953 int ret = ti_bandgap_validate(bgp, id); in ti_bandgap_set_sensor_data()
957 bgp->regval[id].data = data; in ti_bandgap_set_sensor_data()
970 void *ti_bandgap_get_sensor_data(struct ti_bandgap *bgp, int id) in ti_bandgap_get_sensor_data() argument
972 int ret = ti_bandgap_validate(bgp, id); in ti_bandgap_get_sensor_data()
976 return bgp->regval[id].data; in ti_bandgap_get_sensor_data()
992 ti_bandgap_force_single_read(struct ti_bandgap *bgp, int id) in ti_bandgap_force_single_read() argument
997 if (TI_BANDGAP_HAS(bgp, MODE_CONFIG)) in ti_bandgap_force_single_read()
998 RMW_BITS(bgp, id, bgap_mode_ctrl, mode_ctrl_mask, 0); in ti_bandgap_force_single_read()
1001 RMW_BITS(bgp, id, temp_sensor_ctrl, bgap_soc_mask, 1); in ti_bandgap_force_single_read()
1003 temp = ti_bandgap_read_temp(bgp, id); in ti_bandgap_force_single_read()
1006 temp = ti_bandgap_read_temp(bgp, id); in ti_bandgap_force_single_read()
1010 RMW_BITS(bgp, id, temp_sensor_ctrl, bgap_soc_mask, 0); in ti_bandgap_force_single_read()
1026 static int ti_bandgap_set_continuous_mode(struct ti_bandgap *bgp) in ti_bandgap_set_continuous_mode() argument
1030 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_set_continuous_mode()
1032 ti_bandgap_force_single_read(bgp, i); in ti_bandgap_set_continuous_mode()
1033 RMW_BITS(bgp, i, bgap_mode_ctrl, mode_ctrl_mask, 1); in ti_bandgap_set_continuous_mode()
1054 int ti_bandgap_get_trend(struct ti_bandgap *bgp, int id, int *trend) in ti_bandgap_get_trend() argument
1060 ret = ti_bandgap_validate(bgp, id); in ti_bandgap_get_trend()
1064 if (!TI_BANDGAP_HAS(bgp, HISTORY_BUFFER) || in ti_bandgap_get_trend()
1065 !TI_BANDGAP_HAS(bgp, FREEZE_BIT)) { in ti_bandgap_get_trend()
1070 spin_lock(&bgp->lock); in ti_bandgap_get_trend()
1072 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_get_trend()
1075 RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 1); in ti_bandgap_get_trend()
1080 temp1 = ti_bandgap_readl(bgp, reg1); in ti_bandgap_get_trend()
1083 temp2 = ti_bandgap_readl(bgp, reg2); in ti_bandgap_get_trend()
1087 ret = ti_bandgap_adc_to_mcelsius(bgp, temp1, &t1); in ti_bandgap_get_trend()
1091 ret = ti_bandgap_adc_to_mcelsius(bgp, temp2, &t2); in ti_bandgap_get_trend()
1096 ret = ti_bandgap_read_update_interval(bgp, id, &interval); in ti_bandgap_get_trend()
1106 dev_dbg(bgp->dev, "The temperatures are t1 = %d and t2 = %d and trend =%d\n", in ti_bandgap_get_trend()
1110 RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 0); in ti_bandgap_get_trend()
1111 spin_unlock(&bgp->lock); in ti_bandgap_get_trend()
1130 static int ti_bandgap_tshut_init(struct ti_bandgap *bgp, in ti_bandgap_tshut_init() argument
1133 int gpio_nr = bgp->tshut_gpio; in ti_bandgap_tshut_init()
1139 dev_err(bgp->dev, "Could not request for TSHUT GPIO:%i\n", 86); in ti_bandgap_tshut_init()
1144 dev_err(bgp->dev, "Cannot set input TSHUT GPIO %d\n", gpio_nr); in ti_bandgap_tshut_init()
1152 dev_err(bgp->dev, "request irq failed for TSHUT"); in ti_bandgap_tshut_init()
1171 static int ti_bandgap_talert_init(struct ti_bandgap *bgp, in ti_bandgap_talert_init() argument
1176 bgp->irq = platform_get_irq(pdev, 0); in ti_bandgap_talert_init()
1177 if (bgp->irq < 0) { in ti_bandgap_talert_init()
1179 return bgp->irq; in ti_bandgap_talert_init()
1181 ret = request_threaded_irq(bgp->irq, NULL, in ti_bandgap_talert_init()
1184 "talert", bgp); in ti_bandgap_talert_init()
1209 struct ti_bandgap *bgp; in ti_bandgap_build() local
1219 bgp = devm_kzalloc(&pdev->dev, sizeof(*bgp), GFP_KERNEL); in ti_bandgap_build()
1220 if (!bgp) { in ti_bandgap_build()
1227 bgp->conf = of_id->data; in ti_bandgap_build()
1230 bgp->regval = devm_kzalloc(&pdev->dev, sizeof(*bgp->regval) * in ti_bandgap_build()
1231 bgp->conf->sensor_count, GFP_KERNEL); in ti_bandgap_build()
1232 if (!bgp->regval) { in ti_bandgap_build()
1246 bgp->base = chunk; in ti_bandgap_build()
1253 if (TI_BANDGAP_HAS(bgp, TSHUT)) { in ti_bandgap_build()
1254 bgp->tshut_gpio = of_get_gpio(node, 0); in ti_bandgap_build()
1255 if (!gpio_is_valid(bgp->tshut_gpio)) { in ti_bandgap_build()
1257 bgp->tshut_gpio); in ti_bandgap_build()
1262 return bgp; in ti_bandgap_build()
1270 struct ti_bandgap *bgp; in ti_bandgap_probe() local
1273 bgp = ti_bandgap_build(pdev); in ti_bandgap_probe()
1274 if (IS_ERR(bgp)) { in ti_bandgap_probe()
1276 return PTR_ERR(bgp); in ti_bandgap_probe()
1278 bgp->dev = &pdev->dev; in ti_bandgap_probe()
1280 if (TI_BANDGAP_HAS(bgp, TSHUT)) { in ti_bandgap_probe()
1281 ret = ti_bandgap_tshut_init(bgp, pdev); in ti_bandgap_probe()
1289 bgp->fclock = clk_get(NULL, bgp->conf->fclock_name); in ti_bandgap_probe()
1290 ret = IS_ERR(bgp->fclock); in ti_bandgap_probe()
1293 ret = PTR_ERR(bgp->fclock); in ti_bandgap_probe()
1297 bgp->div_clk = clk_get(NULL, bgp->conf->div_ck_name); in ti_bandgap_probe()
1298 ret = IS_ERR(bgp->div_clk); in ti_bandgap_probe()
1302 ret = PTR_ERR(bgp->div_clk); in ti_bandgap_probe()
1306 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_probe()
1310 tsr = bgp->conf->sensors[i].registers; in ti_bandgap_probe()
1316 val = ti_bandgap_readl(bgp, tsr->bgap_efuse); in ti_bandgap_probe()
1322 clk_rate = clk_round_rate(bgp->div_clk, in ti_bandgap_probe()
1323 bgp->conf->sensors[0].ts_data->max_freq); in ti_bandgap_probe()
1324 if (clk_rate < bgp->conf->sensors[0].ts_data->min_freq || in ti_bandgap_probe()
1331 ret = clk_set_rate(bgp->div_clk, clk_rate); in ti_bandgap_probe()
1335 bgp->clk_rate = clk_rate; in ti_bandgap_probe()
1336 if (TI_BANDGAP_HAS(bgp, CLK_CTRL)) in ti_bandgap_probe()
1337 clk_prepare_enable(bgp->fclock); in ti_bandgap_probe()
1340 spin_lock_init(&bgp->lock); in ti_bandgap_probe()
1341 bgp->dev = &pdev->dev; in ti_bandgap_probe()
1342 platform_set_drvdata(pdev, bgp); in ti_bandgap_probe()
1344 ti_bandgap_power(bgp, true); in ti_bandgap_probe()
1347 if (TI_BANDGAP_HAS(bgp, COUNTER)) in ti_bandgap_probe()
1348 for (i = 0; i < bgp->conf->sensor_count; i++) in ti_bandgap_probe()
1349 RMW_BITS(bgp, i, bgap_counter, counter_mask, 1); in ti_bandgap_probe()
1352 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_probe()
1355 ts_data = bgp->conf->sensors[i].ts_data; in ti_bandgap_probe()
1357 if (TI_BANDGAP_HAS(bgp, TALERT)) { in ti_bandgap_probe()
1359 RMW_BITS(bgp, i, bgap_threshold, in ti_bandgap_probe()
1361 RMW_BITS(bgp, i, bgap_threshold, in ti_bandgap_probe()
1364 RMW_BITS(bgp, i, bgap_mask_ctrl, mask_hot_mask, 1); in ti_bandgap_probe()
1365 RMW_BITS(bgp, i, bgap_mask_ctrl, mask_cold_mask, 1); in ti_bandgap_probe()
1368 if (TI_BANDGAP_HAS(bgp, TSHUT_CONFIG)) { in ti_bandgap_probe()
1370 RMW_BITS(bgp, i, tshut_threshold, in ti_bandgap_probe()
1372 RMW_BITS(bgp, i, tshut_threshold, in ti_bandgap_probe()
1377 if (TI_BANDGAP_HAS(bgp, MODE_CONFIG)) in ti_bandgap_probe()
1378 ti_bandgap_set_continuous_mode(bgp); in ti_bandgap_probe()
1381 if (TI_BANDGAP_HAS(bgp, COUNTER)) in ti_bandgap_probe()
1382 for (i = 0; i < bgp->conf->sensor_count; i++) in ti_bandgap_probe()
1383 RMW_BITS(bgp, i, bgap_counter, counter_mask, in ti_bandgap_probe()
1384 bgp->clk_rate / 4); in ti_bandgap_probe()
1387 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_probe()
1390 if (bgp->conf->sensors[i].register_cooling) { in ti_bandgap_probe()
1391 ret = bgp->conf->sensors[i].register_cooling(bgp, i); in ti_bandgap_probe()
1396 if (bgp->conf->expose_sensor) { in ti_bandgap_probe()
1397 domain = bgp->conf->sensors[i].domain; in ti_bandgap_probe()
1398 ret = bgp->conf->expose_sensor(bgp, i, domain); in ti_bandgap_probe()
1409 if (TI_BANDGAP_HAS(bgp, TALERT)) { in ti_bandgap_probe()
1410 ret = ti_bandgap_talert_init(bgp, pdev); in ti_bandgap_probe()
1413 i = bgp->conf->sensor_count; in ti_bandgap_probe()
1421 if (bgp->conf->sensors[i].unregister_cooling) in ti_bandgap_probe()
1422 bgp->conf->sensors[i].unregister_cooling(bgp, i); in ti_bandgap_probe()
1425 if (bgp->conf->sensors[i].unregister_cooling) in ti_bandgap_probe()
1426 bgp->conf->sensors[i].unregister_cooling(bgp, i); in ti_bandgap_probe()
1427 if (bgp->conf->remove_sensor) in ti_bandgap_probe()
1428 bgp->conf->remove_sensor(bgp, i); in ti_bandgap_probe()
1430 ti_bandgap_power(bgp, false); in ti_bandgap_probe()
1432 if (TI_BANDGAP_HAS(bgp, CLK_CTRL)) in ti_bandgap_probe()
1433 clk_disable_unprepare(bgp->fclock); in ti_bandgap_probe()
1435 clk_put(bgp->fclock); in ti_bandgap_probe()
1436 clk_put(bgp->div_clk); in ti_bandgap_probe()
1438 if (TI_BANDGAP_HAS(bgp, TSHUT)) { in ti_bandgap_probe()
1439 free_irq(gpio_to_irq(bgp->tshut_gpio), NULL); in ti_bandgap_probe()
1440 gpio_free(bgp->tshut_gpio); in ti_bandgap_probe()
1449 struct ti_bandgap *bgp = platform_get_drvdata(pdev); in ti_bandgap_remove() local
1453 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_remove()
1454 if (bgp->conf->sensors[i].unregister_cooling) in ti_bandgap_remove()
1455 bgp->conf->sensors[i].unregister_cooling(bgp, i); in ti_bandgap_remove()
1457 if (bgp->conf->remove_sensor) in ti_bandgap_remove()
1458 bgp->conf->remove_sensor(bgp, i); in ti_bandgap_remove()
1461 ti_bandgap_power(bgp, false); in ti_bandgap_remove()
1463 if (TI_BANDGAP_HAS(bgp, CLK_CTRL)) in ti_bandgap_remove()
1464 clk_disable_unprepare(bgp->fclock); in ti_bandgap_remove()
1465 clk_put(bgp->fclock); in ti_bandgap_remove()
1466 clk_put(bgp->div_clk); in ti_bandgap_remove()
1468 if (TI_BANDGAP_HAS(bgp, TALERT)) in ti_bandgap_remove()
1469 free_irq(bgp->irq, bgp); in ti_bandgap_remove()
1471 if (TI_BANDGAP_HAS(bgp, TSHUT)) { in ti_bandgap_remove()
1472 free_irq(gpio_to_irq(bgp->tshut_gpio), NULL); in ti_bandgap_remove()
1473 gpio_free(bgp->tshut_gpio); in ti_bandgap_remove()
1480 static int ti_bandgap_save_ctxt(struct ti_bandgap *bgp) in ti_bandgap_save_ctxt() argument
1484 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_save_ctxt()
1488 rval = &bgp->regval[i]; in ti_bandgap_save_ctxt()
1489 tsr = bgp->conf->sensors[i].registers; in ti_bandgap_save_ctxt()
1491 if (TI_BANDGAP_HAS(bgp, MODE_CONFIG)) in ti_bandgap_save_ctxt()
1492 rval->bg_mode_ctrl = ti_bandgap_readl(bgp, in ti_bandgap_save_ctxt()
1494 if (TI_BANDGAP_HAS(bgp, COUNTER)) in ti_bandgap_save_ctxt()
1495 rval->bg_counter = ti_bandgap_readl(bgp, in ti_bandgap_save_ctxt()
1497 if (TI_BANDGAP_HAS(bgp, TALERT)) { in ti_bandgap_save_ctxt()
1498 rval->bg_threshold = ti_bandgap_readl(bgp, in ti_bandgap_save_ctxt()
1500 rval->bg_ctrl = ti_bandgap_readl(bgp, in ti_bandgap_save_ctxt()
1504 if (TI_BANDGAP_HAS(bgp, TSHUT_CONFIG)) in ti_bandgap_save_ctxt()
1505 rval->tshut_threshold = ti_bandgap_readl(bgp, in ti_bandgap_save_ctxt()
1512 static int ti_bandgap_restore_ctxt(struct ti_bandgap *bgp) in ti_bandgap_restore_ctxt() argument
1516 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_restore_ctxt()
1521 rval = &bgp->regval[i]; in ti_bandgap_restore_ctxt()
1522 tsr = bgp->conf->sensors[i].registers; in ti_bandgap_restore_ctxt()
1524 if (TI_BANDGAP_HAS(bgp, COUNTER)) in ti_bandgap_restore_ctxt()
1525 val = ti_bandgap_readl(bgp, tsr->bgap_counter); in ti_bandgap_restore_ctxt()
1527 if (TI_BANDGAP_HAS(bgp, TSHUT_CONFIG)) in ti_bandgap_restore_ctxt()
1528 ti_bandgap_writel(bgp, rval->tshut_threshold, in ti_bandgap_restore_ctxt()
1533 ti_bandgap_force_single_read(bgp, i); in ti_bandgap_restore_ctxt()
1535 if (TI_BANDGAP_HAS(bgp, COUNTER)) in ti_bandgap_restore_ctxt()
1536 ti_bandgap_writel(bgp, rval->bg_counter, in ti_bandgap_restore_ctxt()
1538 if (TI_BANDGAP_HAS(bgp, MODE_CONFIG)) in ti_bandgap_restore_ctxt()
1539 ti_bandgap_writel(bgp, rval->bg_mode_ctrl, in ti_bandgap_restore_ctxt()
1541 if (TI_BANDGAP_HAS(bgp, TALERT)) { in ti_bandgap_restore_ctxt()
1542 ti_bandgap_writel(bgp, rval->bg_threshold, in ti_bandgap_restore_ctxt()
1544 ti_bandgap_writel(bgp, rval->bg_ctrl, in ti_bandgap_restore_ctxt()
1554 struct ti_bandgap *bgp = dev_get_drvdata(dev); in ti_bandgap_suspend() local
1557 err = ti_bandgap_save_ctxt(bgp); in ti_bandgap_suspend()
1558 ti_bandgap_power(bgp, false); in ti_bandgap_suspend()
1560 if (TI_BANDGAP_HAS(bgp, CLK_CTRL)) in ti_bandgap_suspend()
1561 clk_disable_unprepare(bgp->fclock); in ti_bandgap_suspend()
1568 struct ti_bandgap *bgp = dev_get_drvdata(dev); in ti_bandgap_resume() local
1570 if (TI_BANDGAP_HAS(bgp, CLK_CTRL)) in ti_bandgap_resume()
1571 clk_prepare_enable(bgp->fclock); in ti_bandgap_resume()
1573 ti_bandgap_power(bgp, true); in ti_bandgap_resume()
1575 return ti_bandgap_restore_ctxt(bgp); in ti_bandgap_resume()