Lines Matching refs:bgp
46 static int ti_bandgap_force_single_read(struct ti_bandgap *bgp, int id);
58 static u32 ti_bandgap_readl(struct ti_bandgap *bgp, u32 reg) in ti_bandgap_readl() argument
60 return readl(bgp->base + reg); in ti_bandgap_readl()
71 static void ti_bandgap_writel(struct ti_bandgap *bgp, u32 val, u32 reg) in ti_bandgap_writel() argument
73 writel(val, bgp->base + reg); in ti_bandgap_writel()
82 #define RMW_BITS(bgp, id, reg, mask, val) \ argument
87 t = bgp->conf->sensors[(id)].registers; \
88 r = ti_bandgap_readl(bgp, t->reg); \
91 ti_bandgap_writel(bgp, r, t->reg); \
106 static int ti_bandgap_power(struct ti_bandgap *bgp, bool on) in ti_bandgap_power() argument
110 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()
135 static u32 ti_errata814_bandgap_read_temp(struct ti_bandgap *bgp, u32 reg) in ti_errata814_bandgap_read_temp() argument
139 val1 = ti_bandgap_readl(bgp, reg); in ti_errata814_bandgap_read_temp()
140 val2 = ti_bandgap_readl(bgp, reg); in ti_errata814_bandgap_read_temp()
147 return ti_bandgap_readl(bgp, reg); in ti_errata814_bandgap_read_temp()
162 static u32 ti_bandgap_read_temp(struct ti_bandgap *bgp, int id) in ti_bandgap_read_temp() argument
167 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_read_temp()
170 if (TI_BANDGAP_HAS(bgp, FREEZE_BIT)) { in ti_bandgap_read_temp()
171 RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 1); in ti_bandgap_read_temp()
180 if (TI_BANDGAP_HAS(bgp, ERRATA_814)) in ti_bandgap_read_temp()
181 temp = ti_errata814_bandgap_read_temp(bgp, reg); in ti_bandgap_read_temp()
183 temp = ti_bandgap_readl(bgp, reg); in ti_bandgap_read_temp()
187 if (TI_BANDGAP_HAS(bgp, FREEZE_BIT)) in ti_bandgap_read_temp()
188 RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 0); in ti_bandgap_read_temp()
210 struct ti_bandgap *bgp = data; in ti_bandgap_talert_irq_handler() local
215 spin_lock(&bgp->lock); in ti_bandgap_talert_irq_handler()
216 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_talert_irq_handler()
217 tsr = bgp->conf->sensors[i].registers; in ti_bandgap_talert_irq_handler()
218 ctrl = ti_bandgap_readl(bgp, tsr->bgap_status); in ti_bandgap_talert_irq_handler()
229 ctrl = ti_bandgap_readl(bgp, tsr->bgap_mask_ctrl); in ti_bandgap_talert_irq_handler()
243 ti_bandgap_writel(bgp, ctrl, tsr->bgap_mask_ctrl); in ti_bandgap_talert_irq_handler()
245 dev_dbg(bgp->dev, in ti_bandgap_talert_irq_handler()
247 __func__, bgp->conf->sensors[i].domain, in ti_bandgap_talert_irq_handler()
251 if (bgp->conf->report_temperature) in ti_bandgap_talert_irq_handler()
252 bgp->conf->report_temperature(bgp, i); in ti_bandgap_talert_irq_handler()
254 spin_unlock(&bgp->lock); in ti_bandgap_talert_irq_handler()
296 int ti_bandgap_adc_to_mcelsius(struct ti_bandgap *bgp, int adc_val, int *t) in ti_bandgap_adc_to_mcelsius() argument
298 const struct ti_bandgap_data *conf = bgp->conf; in ti_bandgap_adc_to_mcelsius()
304 *t = bgp->conf->conv_table[adc_val - conf->adc_start_val]; in ti_bandgap_adc_to_mcelsius()
322 int ti_bandgap_mcelsius_to_adc(struct ti_bandgap *bgp, long temp, int *adc) in ti_bandgap_mcelsius_to_adc() argument
324 const struct ti_bandgap_data *conf = bgp->conf; in ti_bandgap_mcelsius_to_adc()
325 const int *conv_table = bgp->conf->conv_table; in ti_bandgap_mcelsius_to_adc()
359 int ti_bandgap_add_hyst(struct ti_bandgap *bgp, int adc_val, int hyst_val, in ti_bandgap_add_hyst() argument
368 ret = ti_bandgap_adc_to_mcelsius(bgp, adc_val, &temp); in ti_bandgap_add_hyst()
374 ret = ti_bandgap_mcelsius_to_adc(bgp, temp, sum); in ti_bandgap_add_hyst()
390 static void ti_bandgap_unmask_interrupts(struct ti_bandgap *bgp, int id, in ti_bandgap_unmask_interrupts() argument
397 temp = ti_bandgap_read_temp(bgp, id); in ti_bandgap_unmask_interrupts()
399 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_unmask_interrupts()
400 reg_val = ti_bandgap_readl(bgp, tsr->bgap_mask_ctrl); in ti_bandgap_unmask_interrupts()
411 ti_bandgap_writel(bgp, reg_val, tsr->bgap_mask_ctrl); in ti_bandgap_unmask_interrupts()
430 static int ti_bandgap_update_alert_threshold(struct ti_bandgap *bgp, int id, in ti_bandgap_update_alert_threshold() argument
433 struct temp_sensor_data *ts_data = bgp->conf->sensors[id].ts_data; in ti_bandgap_update_alert_threshold()
438 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_update_alert_threshold()
441 thresh_val = ti_bandgap_readl(bgp, tsr->bgap_threshold); in ti_bandgap_update_alert_threshold()
453 err = ti_bandgap_add_hyst(bgp, t_hot, in ti_bandgap_update_alert_threshold()
457 err = ti_bandgap_add_hyst(bgp, t_cold, in ti_bandgap_update_alert_threshold()
482 if (TI_BANDGAP_HAS(bgp, ERRATA_813)) { in ti_bandgap_update_alert_threshold()
484 ctrl = ti_bandgap_readl(bgp, tsr->bgap_mask_ctrl); in ti_bandgap_update_alert_threshold()
491 ti_bandgap_writel(bgp, ctrl, tsr->bgap_mask_ctrl); in ti_bandgap_update_alert_threshold()
495 ti_bandgap_writel(bgp, reg_val, tsr->bgap_threshold); in ti_bandgap_update_alert_threshold()
497 if (TI_BANDGAP_HAS(bgp, ERRATA_813)) { in ti_bandgap_update_alert_threshold()
499 ctrl = ti_bandgap_readl(bgp, tsr->bgap_mask_ctrl); in ti_bandgap_update_alert_threshold()
505 ti_bandgap_writel(bgp, ctrl, tsr->bgap_mask_ctrl); in ti_bandgap_update_alert_threshold()
509 dev_err(bgp->dev, "failed to reprogram thot threshold\n"); in ti_bandgap_update_alert_threshold()
514 ti_bandgap_unmask_interrupts(bgp, id, t_hot, t_cold); in ti_bandgap_update_alert_threshold()
530 static inline int ti_bandgap_validate(struct ti_bandgap *bgp, int id) in ti_bandgap_validate() argument
532 if (!bgp || IS_ERR(bgp)) { in ti_bandgap_validate()
537 if ((id < 0) || (id >= bgp->conf->sensor_count)) { in ti_bandgap_validate()
538 dev_err(bgp->dev, "%s: sensor id out of range (%d)\n", in ti_bandgap_validate()
561 static int _ti_bandgap_write_threshold(struct ti_bandgap *bgp, int id, int val, in _ti_bandgap_write_threshold() argument
569 ret = ti_bandgap_validate(bgp, id); in _ti_bandgap_write_threshold()
573 if (!TI_BANDGAP_HAS(bgp, TALERT)) in _ti_bandgap_write_threshold()
576 ts_data = bgp->conf->sensors[id].ts_data; in _ti_bandgap_write_threshold()
577 tsr = bgp->conf->sensors[id].registers; in _ti_bandgap_write_threshold()
589 ret = ti_bandgap_mcelsius_to_adc(bgp, val, &adc_val); in _ti_bandgap_write_threshold()
593 spin_lock(&bgp->lock); in _ti_bandgap_write_threshold()
594 ret = ti_bandgap_update_alert_threshold(bgp, id, adc_val, hot); in _ti_bandgap_write_threshold()
595 spin_unlock(&bgp->lock); in _ti_bandgap_write_threshold()
614 static int _ti_bandgap_read_threshold(struct ti_bandgap *bgp, int id, in _ti_bandgap_read_threshold() argument
621 ret = ti_bandgap_validate(bgp, id); in _ti_bandgap_read_threshold()
625 if (!TI_BANDGAP_HAS(bgp, TALERT)) { in _ti_bandgap_read_threshold()
630 tsr = bgp->conf->sensors[id].registers; in _ti_bandgap_read_threshold()
636 temp = ti_bandgap_readl(bgp, tsr->bgap_threshold); in _ti_bandgap_read_threshold()
638 ret = ti_bandgap_adc_to_mcelsius(bgp, temp, &temp); in _ti_bandgap_read_threshold()
640 dev_err(bgp->dev, "failed to read thot\n"); in _ti_bandgap_read_threshold()
661 int ti_bandgap_read_thot(struct ti_bandgap *bgp, int id, int *thot) in ti_bandgap_read_thot() argument
663 return _ti_bandgap_read_threshold(bgp, id, thot, true); in ti_bandgap_read_thot()
674 int ti_bandgap_write_thot(struct ti_bandgap *bgp, int id, int val) in ti_bandgap_write_thot() argument
676 return _ti_bandgap_write_threshold(bgp, id, val, true); in ti_bandgap_write_thot()
687 int ti_bandgap_read_tcold(struct ti_bandgap *bgp, int id, int *tcold) in ti_bandgap_read_tcold() argument
689 return _ti_bandgap_read_threshold(bgp, id, tcold, false); in ti_bandgap_read_tcold()
700 int ti_bandgap_write_tcold(struct ti_bandgap *bgp, int id, int val) in ti_bandgap_write_tcold() argument
702 return _ti_bandgap_write_threshold(bgp, id, val, false); in ti_bandgap_write_tcold()
711 static void ti_bandgap_read_counter(struct ti_bandgap *bgp, int id, in ti_bandgap_read_counter() argument
717 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_read_counter()
718 time = ti_bandgap_readl(bgp, tsr->bgap_counter); in ti_bandgap_read_counter()
721 time = time * 1000 / bgp->clk_rate; in ti_bandgap_read_counter()
731 static void ti_bandgap_read_counter_delay(struct ti_bandgap *bgp, int id, in ti_bandgap_read_counter_delay() argument
737 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_read_counter_delay()
739 reg_val = ti_bandgap_readl(bgp, tsr->bgap_mask_ctrl); in ti_bandgap_read_counter_delay()
762 dev_warn(bgp->dev, "Wrong counter delay value read from register %X", in ti_bandgap_read_counter_delay()
775 int ti_bandgap_read_update_interval(struct ti_bandgap *bgp, int id, in ti_bandgap_read_update_interval() argument
780 ret = ti_bandgap_validate(bgp, id); in ti_bandgap_read_update_interval()
784 if (!TI_BANDGAP_HAS(bgp, COUNTER) && in ti_bandgap_read_update_interval()
785 !TI_BANDGAP_HAS(bgp, COUNTER_DELAY)) { in ti_bandgap_read_update_interval()
790 if (TI_BANDGAP_HAS(bgp, COUNTER)) { in ti_bandgap_read_update_interval()
791 ti_bandgap_read_counter(bgp, id, interval); in ti_bandgap_read_update_interval()
795 ti_bandgap_read_counter_delay(bgp, id, interval); in ti_bandgap_read_update_interval()
808 static int ti_bandgap_write_counter_delay(struct ti_bandgap *bgp, int id, in ti_bandgap_write_counter_delay() argument
833 dev_warn(bgp->dev, "Delay %d ms is not supported\n", interval); in ti_bandgap_write_counter_delay()
837 spin_lock(&bgp->lock); in ti_bandgap_write_counter_delay()
838 RMW_BITS(bgp, id, bgap_mask_ctrl, mask_counter_delay_mask, rval); in ti_bandgap_write_counter_delay()
839 spin_unlock(&bgp->lock); in ti_bandgap_write_counter_delay()
850 static void ti_bandgap_write_counter(struct ti_bandgap *bgp, int id, in ti_bandgap_write_counter() argument
853 interval = interval * bgp->clk_rate / 1000; in ti_bandgap_write_counter()
854 spin_lock(&bgp->lock); in ti_bandgap_write_counter()
855 RMW_BITS(bgp, id, bgap_counter, counter_mask, interval); in ti_bandgap_write_counter()
856 spin_unlock(&bgp->lock); in ti_bandgap_write_counter()
867 int ti_bandgap_write_update_interval(struct ti_bandgap *bgp, in ti_bandgap_write_update_interval() argument
870 int ret = ti_bandgap_validate(bgp, id); in ti_bandgap_write_update_interval()
874 if (!TI_BANDGAP_HAS(bgp, COUNTER) && in ti_bandgap_write_update_interval()
875 !TI_BANDGAP_HAS(bgp, COUNTER_DELAY)) { in ti_bandgap_write_update_interval()
880 if (TI_BANDGAP_HAS(bgp, COUNTER)) { in ti_bandgap_write_update_interval()
881 ti_bandgap_write_counter(bgp, id, interval); in ti_bandgap_write_update_interval()
885 ret = ti_bandgap_write_counter_delay(bgp, id, interval); in ti_bandgap_write_update_interval()
898 int ti_bandgap_read_temperature(struct ti_bandgap *bgp, int id, in ti_bandgap_read_temperature() argument
904 ret = ti_bandgap_validate(bgp, id); in ti_bandgap_read_temperature()
908 if (!TI_BANDGAP_HAS(bgp, MODE_CONFIG)) { in ti_bandgap_read_temperature()
909 ret = ti_bandgap_force_single_read(bgp, id); in ti_bandgap_read_temperature()
914 spin_lock(&bgp->lock); in ti_bandgap_read_temperature()
915 temp = ti_bandgap_read_temp(bgp, id); in ti_bandgap_read_temperature()
916 spin_unlock(&bgp->lock); in ti_bandgap_read_temperature()
918 ret = ti_bandgap_adc_to_mcelsius(bgp, temp, &temp); in ti_bandgap_read_temperature()
936 int ti_bandgap_set_sensor_data(struct ti_bandgap *bgp, int id, void *data) in ti_bandgap_set_sensor_data() argument
938 int ret = ti_bandgap_validate(bgp, id); in ti_bandgap_set_sensor_data()
942 bgp->regval[id].data = data; in ti_bandgap_set_sensor_data()
955 void *ti_bandgap_get_sensor_data(struct ti_bandgap *bgp, int id) in ti_bandgap_get_sensor_data() argument
957 int ret = ti_bandgap_validate(bgp, id); in ti_bandgap_get_sensor_data()
961 return bgp->regval[id].data; in ti_bandgap_get_sensor_data()
977 ti_bandgap_force_single_read(struct ti_bandgap *bgp, int id) in ti_bandgap_force_single_read() argument
983 if (TI_BANDGAP_HAS(bgp, MODE_CONFIG)) in ti_bandgap_force_single_read()
984 RMW_BITS(bgp, id, bgap_mode_ctrl, mode_ctrl_mask, 0); in ti_bandgap_force_single_read()
987 RMW_BITS(bgp, id, temp_sensor_ctrl, bgap_soc_mask, 1); in ti_bandgap_force_single_read()
990 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_force_single_read()
993 if (ti_bandgap_readl(bgp, tsr->temp_sensor_ctrl) & in ti_bandgap_force_single_read()
999 RMW_BITS(bgp, id, temp_sensor_ctrl, bgap_soc_mask, 0); in ti_bandgap_force_single_read()
1004 if (!(ti_bandgap_readl(bgp, tsr->temp_sensor_ctrl) & in ti_bandgap_force_single_read()
1023 static int ti_bandgap_set_continuous_mode(struct ti_bandgap *bgp) in ti_bandgap_set_continuous_mode() argument
1027 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_set_continuous_mode()
1029 ti_bandgap_force_single_read(bgp, i); in ti_bandgap_set_continuous_mode()
1030 RMW_BITS(bgp, i, bgap_mode_ctrl, mode_ctrl_mask, 1); in ti_bandgap_set_continuous_mode()
1051 int ti_bandgap_get_trend(struct ti_bandgap *bgp, int id, int *trend) in ti_bandgap_get_trend() argument
1057 ret = ti_bandgap_validate(bgp, id); in ti_bandgap_get_trend()
1061 if (!TI_BANDGAP_HAS(bgp, HISTORY_BUFFER) || in ti_bandgap_get_trend()
1062 !TI_BANDGAP_HAS(bgp, FREEZE_BIT)) { in ti_bandgap_get_trend()
1067 spin_lock(&bgp->lock); in ti_bandgap_get_trend()
1069 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_get_trend()
1072 RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 1); in ti_bandgap_get_trend()
1077 temp1 = ti_bandgap_readl(bgp, reg1); in ti_bandgap_get_trend()
1080 temp2 = ti_bandgap_readl(bgp, reg2); in ti_bandgap_get_trend()
1084 ret = ti_bandgap_adc_to_mcelsius(bgp, temp1, &t1); in ti_bandgap_get_trend()
1088 ret = ti_bandgap_adc_to_mcelsius(bgp, temp2, &t2); in ti_bandgap_get_trend()
1093 ret = ti_bandgap_read_update_interval(bgp, id, &interval); in ti_bandgap_get_trend()
1103 dev_dbg(bgp->dev, "The temperatures are t1 = %d and t2 = %d and trend =%d\n", in ti_bandgap_get_trend()
1107 RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 0); in ti_bandgap_get_trend()
1108 spin_unlock(&bgp->lock); in ti_bandgap_get_trend()
1127 static int ti_bandgap_tshut_init(struct ti_bandgap *bgp, in ti_bandgap_tshut_init() argument
1130 int gpio_nr = bgp->tshut_gpio; in ti_bandgap_tshut_init()
1136 dev_err(bgp->dev, "Could not request for TSHUT GPIO:%i\n", 86); in ti_bandgap_tshut_init()
1141 dev_err(bgp->dev, "Cannot set input TSHUT GPIO %d\n", gpio_nr); in ti_bandgap_tshut_init()
1149 dev_err(bgp->dev, "request irq failed for TSHUT"); in ti_bandgap_tshut_init()
1168 static int ti_bandgap_talert_init(struct ti_bandgap *bgp, in ti_bandgap_talert_init() argument
1173 bgp->irq = platform_get_irq(pdev, 0); in ti_bandgap_talert_init()
1174 if (bgp->irq < 0) { in ti_bandgap_talert_init()
1176 return bgp->irq; in ti_bandgap_talert_init()
1178 ret = request_threaded_irq(bgp->irq, NULL, in ti_bandgap_talert_init()
1181 "talert", bgp); in ti_bandgap_talert_init()
1206 struct ti_bandgap *bgp; in ti_bandgap_build() local
1216 bgp = devm_kzalloc(&pdev->dev, sizeof(*bgp), GFP_KERNEL); in ti_bandgap_build()
1217 if (!bgp) { in ti_bandgap_build()
1224 bgp->conf = of_id->data; in ti_bandgap_build()
1227 bgp->regval = devm_kzalloc(&pdev->dev, sizeof(*bgp->regval) * in ti_bandgap_build()
1228 bgp->conf->sensor_count, GFP_KERNEL); in ti_bandgap_build()
1229 if (!bgp->regval) { in ti_bandgap_build()
1243 bgp->base = chunk; in ti_bandgap_build()
1250 if (TI_BANDGAP_HAS(bgp, TSHUT)) { in ti_bandgap_build()
1251 bgp->tshut_gpio = of_get_gpio(node, 0); in ti_bandgap_build()
1252 if (!gpio_is_valid(bgp->tshut_gpio)) { in ti_bandgap_build()
1254 bgp->tshut_gpio); in ti_bandgap_build()
1259 return bgp; in ti_bandgap_build()
1267 struct ti_bandgap *bgp; in ti_bandgap_probe() local
1270 bgp = ti_bandgap_build(pdev); in ti_bandgap_probe()
1271 if (IS_ERR(bgp)) { in ti_bandgap_probe()
1273 return PTR_ERR(bgp); in ti_bandgap_probe()
1275 bgp->dev = &pdev->dev; in ti_bandgap_probe()
1277 if (TI_BANDGAP_HAS(bgp, UNRELIABLE)) in ti_bandgap_probe()
1281 if (TI_BANDGAP_HAS(bgp, TSHUT)) { in ti_bandgap_probe()
1282 ret = ti_bandgap_tshut_init(bgp, pdev); in ti_bandgap_probe()
1290 bgp->fclock = clk_get(NULL, bgp->conf->fclock_name); in ti_bandgap_probe()
1291 ret = IS_ERR(bgp->fclock); in ti_bandgap_probe()
1294 ret = PTR_ERR(bgp->fclock); in ti_bandgap_probe()
1298 bgp->div_clk = clk_get(NULL, bgp->conf->div_ck_name); in ti_bandgap_probe()
1299 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()