Lines Matching refs:bgp

38 static int ti_bandgap_force_single_read(struct ti_bandgap *bgp, int id);
54 static u32 ti_bandgap_readl(struct ti_bandgap *bgp, u32 reg) in ti_bandgap_readl() argument
56 return readl(bgp->base + reg); in ti_bandgap_readl()
67 static void ti_bandgap_writel(struct ti_bandgap *bgp, u32 val, u32 reg) in ti_bandgap_writel() argument
69 writel(val, bgp->base + reg); in ti_bandgap_writel()
78 #define RMW_BITS(bgp, id, reg, mask, val) \ argument
83 t = bgp->conf->sensors[(id)].registers; \
84 r = ti_bandgap_readl(bgp, t->reg); \
87 ti_bandgap_writel(bgp, r, t->reg); \
102 static int ti_bandgap_power(struct ti_bandgap *bgp, bool on) in ti_bandgap_power() argument
106 if (!TI_BANDGAP_HAS(bgp, POWER_SWITCH)) in ti_bandgap_power()
109 for (i = 0; i < bgp->conf->sensor_count; i++) in ti_bandgap_power()
111 RMW_BITS(bgp, i, temp_sensor_ctrl, bgap_tempsoff_mask, !on); in ti_bandgap_power()
131 static u32 ti_errata814_bandgap_read_temp(struct ti_bandgap *bgp, u32 reg) in ti_errata814_bandgap_read_temp() argument
135 val1 = ti_bandgap_readl(bgp, reg); in ti_errata814_bandgap_read_temp()
136 val2 = ti_bandgap_readl(bgp, reg); in ti_errata814_bandgap_read_temp()
143 return ti_bandgap_readl(bgp, reg); in ti_errata814_bandgap_read_temp()
158 static u32 ti_bandgap_read_temp(struct ti_bandgap *bgp, int id) in ti_bandgap_read_temp() argument
163 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_read_temp()
166 if (TI_BANDGAP_HAS(bgp, FREEZE_BIT)) { in ti_bandgap_read_temp()
167 RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 1); in ti_bandgap_read_temp()
176 if (TI_BANDGAP_HAS(bgp, ERRATA_814)) in ti_bandgap_read_temp()
177 temp = ti_errata814_bandgap_read_temp(bgp, reg); in ti_bandgap_read_temp()
179 temp = ti_bandgap_readl(bgp, reg); in ti_bandgap_read_temp()
183 if (TI_BANDGAP_HAS(bgp, FREEZE_BIT)) in ti_bandgap_read_temp()
184 RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 0); in ti_bandgap_read_temp()
206 struct ti_bandgap *bgp = data; in ti_bandgap_talert_irq_handler() local
211 spin_lock(&bgp->lock); in ti_bandgap_talert_irq_handler()
212 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_talert_irq_handler()
213 tsr = bgp->conf->sensors[i].registers; in ti_bandgap_talert_irq_handler()
214 ctrl = ti_bandgap_readl(bgp, tsr->bgap_status); in ti_bandgap_talert_irq_handler()
225 ctrl = ti_bandgap_readl(bgp, tsr->bgap_mask_ctrl); in ti_bandgap_talert_irq_handler()
239 ti_bandgap_writel(bgp, ctrl, tsr->bgap_mask_ctrl); in ti_bandgap_talert_irq_handler()
241 dev_dbg(bgp->dev, in ti_bandgap_talert_irq_handler()
243 __func__, bgp->conf->sensors[i].domain, in ti_bandgap_talert_irq_handler()
247 if (bgp->conf->report_temperature) in ti_bandgap_talert_irq_handler()
248 bgp->conf->report_temperature(bgp, i); in ti_bandgap_talert_irq_handler()
250 spin_unlock(&bgp->lock); in ti_bandgap_talert_irq_handler()
292 int ti_bandgap_adc_to_mcelsius(struct ti_bandgap *bgp, int adc_val, int *t) in ti_bandgap_adc_to_mcelsius() argument
294 const struct ti_bandgap_data *conf = bgp->conf; in ti_bandgap_adc_to_mcelsius()
300 *t = bgp->conf->conv_table[adc_val - conf->adc_start_val]; in ti_bandgap_adc_to_mcelsius()
315 static inline int ti_bandgap_validate(struct ti_bandgap *bgp, int id) in ti_bandgap_validate() argument
317 if (IS_ERR_OR_NULL(bgp)) { in ti_bandgap_validate()
322 if ((id < 0) || (id >= bgp->conf->sensor_count)) { in ti_bandgap_validate()
323 dev_err(bgp->dev, "%s: sensor id out of range (%d)\n", in ti_bandgap_validate()
337 static void ti_bandgap_read_counter(struct ti_bandgap *bgp, int id, in ti_bandgap_read_counter() argument
343 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_read_counter()
344 time = ti_bandgap_readl(bgp, tsr->bgap_counter); in ti_bandgap_read_counter()
347 time = time * 1000 / bgp->clk_rate; in ti_bandgap_read_counter()
357 static void ti_bandgap_read_counter_delay(struct ti_bandgap *bgp, int id, in ti_bandgap_read_counter_delay() argument
363 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_read_counter_delay()
365 reg_val = ti_bandgap_readl(bgp, tsr->bgap_mask_ctrl); in ti_bandgap_read_counter_delay()
388 dev_warn(bgp->dev, "Wrong counter delay value read from register %X", in ti_bandgap_read_counter_delay()
401 int ti_bandgap_read_update_interval(struct ti_bandgap *bgp, int id, in ti_bandgap_read_update_interval() argument
406 ret = ti_bandgap_validate(bgp, id); in ti_bandgap_read_update_interval()
410 if (!TI_BANDGAP_HAS(bgp, COUNTER) && in ti_bandgap_read_update_interval()
411 !TI_BANDGAP_HAS(bgp, COUNTER_DELAY)) { in ti_bandgap_read_update_interval()
416 if (TI_BANDGAP_HAS(bgp, COUNTER)) { in ti_bandgap_read_update_interval()
417 ti_bandgap_read_counter(bgp, id, interval); in ti_bandgap_read_update_interval()
421 ti_bandgap_read_counter_delay(bgp, id, interval); in ti_bandgap_read_update_interval()
434 static int ti_bandgap_write_counter_delay(struct ti_bandgap *bgp, int id, in ti_bandgap_write_counter_delay() argument
459 dev_warn(bgp->dev, "Delay %d ms is not supported\n", interval); in ti_bandgap_write_counter_delay()
463 spin_lock(&bgp->lock); in ti_bandgap_write_counter_delay()
464 RMW_BITS(bgp, id, bgap_mask_ctrl, mask_counter_delay_mask, rval); in ti_bandgap_write_counter_delay()
465 spin_unlock(&bgp->lock); in ti_bandgap_write_counter_delay()
476 static void ti_bandgap_write_counter(struct ti_bandgap *bgp, int id, in ti_bandgap_write_counter() argument
479 interval = interval * bgp->clk_rate / 1000; in ti_bandgap_write_counter()
480 spin_lock(&bgp->lock); in ti_bandgap_write_counter()
481 RMW_BITS(bgp, id, bgap_counter, counter_mask, interval); in ti_bandgap_write_counter()
482 spin_unlock(&bgp->lock); in ti_bandgap_write_counter()
493 int ti_bandgap_write_update_interval(struct ti_bandgap *bgp, in ti_bandgap_write_update_interval() argument
496 int ret = ti_bandgap_validate(bgp, id); in ti_bandgap_write_update_interval()
500 if (!TI_BANDGAP_HAS(bgp, COUNTER) && in ti_bandgap_write_update_interval()
501 !TI_BANDGAP_HAS(bgp, COUNTER_DELAY)) { in ti_bandgap_write_update_interval()
506 if (TI_BANDGAP_HAS(bgp, COUNTER)) { in ti_bandgap_write_update_interval()
507 ti_bandgap_write_counter(bgp, id, interval); in ti_bandgap_write_update_interval()
511 ret = ti_bandgap_write_counter_delay(bgp, id, interval); in ti_bandgap_write_update_interval()
524 int ti_bandgap_read_temperature(struct ti_bandgap *bgp, int id, in ti_bandgap_read_temperature() argument
530 ret = ti_bandgap_validate(bgp, id); in ti_bandgap_read_temperature()
534 if (!TI_BANDGAP_HAS(bgp, MODE_CONFIG)) { in ti_bandgap_read_temperature()
535 ret = ti_bandgap_force_single_read(bgp, id); in ti_bandgap_read_temperature()
540 spin_lock(&bgp->lock); in ti_bandgap_read_temperature()
541 temp = ti_bandgap_read_temp(bgp, id); in ti_bandgap_read_temperature()
542 spin_unlock(&bgp->lock); in ti_bandgap_read_temperature()
544 ret = ti_bandgap_adc_to_mcelsius(bgp, temp, &temp); in ti_bandgap_read_temperature()
562 int ti_bandgap_set_sensor_data(struct ti_bandgap *bgp, int id, void *data) in ti_bandgap_set_sensor_data() argument
564 int ret = ti_bandgap_validate(bgp, id); in ti_bandgap_set_sensor_data()
568 bgp->regval[id].data = data; in ti_bandgap_set_sensor_data()
581 void *ti_bandgap_get_sensor_data(struct ti_bandgap *bgp, int id) in ti_bandgap_get_sensor_data() argument
583 int ret = ti_bandgap_validate(bgp, id); in ti_bandgap_get_sensor_data()
587 return bgp->regval[id].data; in ti_bandgap_get_sensor_data()
603 ti_bandgap_force_single_read(struct ti_bandgap *bgp, int id) in ti_bandgap_force_single_read() argument
605 struct temp_sensor_registers *tsr = bgp->conf->sensors[id].registers; in ti_bandgap_force_single_read()
606 void __iomem *temp_sensor_ctrl = bgp->base + tsr->temp_sensor_ctrl; in ti_bandgap_force_single_read()
611 if (TI_BANDGAP_HAS(bgp, MODE_CONFIG)) { in ti_bandgap_force_single_read()
612 if (TI_BANDGAP_HAS(bgp, CONT_MODE_ONLY)) in ti_bandgap_force_single_read()
613 RMW_BITS(bgp, id, bgap_mode_ctrl, mode_ctrl_mask, 1); in ti_bandgap_force_single_read()
615 RMW_BITS(bgp, id, bgap_mode_ctrl, mode_ctrl_mask, 0); in ti_bandgap_force_single_read()
620 RMW_BITS(bgp, id, temp_sensor_ctrl, bgap_soc_mask, 1); in ti_bandgap_force_single_read()
627 dev_warn(bgp->dev, "eocz timed out waiting high\n"); in ti_bandgap_force_single_read()
630 RMW_BITS(bgp, id, temp_sensor_ctrl, bgap_soc_mask, 0); in ti_bandgap_force_single_read()
638 dev_warn(bgp->dev, "eocz timed out waiting low\n"); in ti_bandgap_force_single_read()
654 static int ti_bandgap_set_continuous_mode(struct ti_bandgap *bgp) in ti_bandgap_set_continuous_mode() argument
658 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_set_continuous_mode()
660 ti_bandgap_force_single_read(bgp, i); in ti_bandgap_set_continuous_mode()
661 RMW_BITS(bgp, i, bgap_mode_ctrl, mode_ctrl_mask, 1); in ti_bandgap_set_continuous_mode()
682 int ti_bandgap_get_trend(struct ti_bandgap *bgp, int id, int *trend) in ti_bandgap_get_trend() argument
688 ret = ti_bandgap_validate(bgp, id); in ti_bandgap_get_trend()
692 if (!TI_BANDGAP_HAS(bgp, HISTORY_BUFFER) || in ti_bandgap_get_trend()
693 !TI_BANDGAP_HAS(bgp, FREEZE_BIT)) { in ti_bandgap_get_trend()
698 spin_lock(&bgp->lock); in ti_bandgap_get_trend()
700 tsr = bgp->conf->sensors[id].registers; in ti_bandgap_get_trend()
703 RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 1); in ti_bandgap_get_trend()
708 temp1 = ti_bandgap_readl(bgp, reg1); in ti_bandgap_get_trend()
711 temp2 = ti_bandgap_readl(bgp, reg2); in ti_bandgap_get_trend()
715 ret = ti_bandgap_adc_to_mcelsius(bgp, temp1, &t1); in ti_bandgap_get_trend()
719 ret = ti_bandgap_adc_to_mcelsius(bgp, temp2, &t2); in ti_bandgap_get_trend()
724 ret = ti_bandgap_read_update_interval(bgp, id, &interval); in ti_bandgap_get_trend()
734 dev_dbg(bgp->dev, "The temperatures are t1 = %d and t2 = %d and trend =%d\n", in ti_bandgap_get_trend()
738 RMW_BITS(bgp, id, bgap_mask_ctrl, mask_freeze_mask, 0); in ti_bandgap_get_trend()
739 spin_unlock(&bgp->lock); in ti_bandgap_get_trend()
758 static int ti_bandgap_tshut_init(struct ti_bandgap *bgp, in ti_bandgap_tshut_init() argument
763 status = request_irq(gpiod_to_irq(bgp->tshut_gpiod), in ti_bandgap_tshut_init()
767 dev_err(bgp->dev, "request irq failed for TSHUT"); in ti_bandgap_tshut_init()
785 static int ti_bandgap_talert_init(struct ti_bandgap *bgp, in ti_bandgap_talert_init() argument
790 bgp->irq = platform_get_irq(pdev, 0); in ti_bandgap_talert_init()
791 if (bgp->irq < 0) in ti_bandgap_talert_init()
792 return bgp->irq; in ti_bandgap_talert_init()
794 ret = request_threaded_irq(bgp->irq, NULL, in ti_bandgap_talert_init()
797 "talert", bgp); in ti_bandgap_talert_init()
822 struct ti_bandgap *bgp; in ti_bandgap_build() local
832 bgp = devm_kzalloc(&pdev->dev, sizeof(*bgp), GFP_KERNEL); in ti_bandgap_build()
833 if (!bgp) in ti_bandgap_build()
838 bgp->conf = of_id->data; in ti_bandgap_build()
841 bgp->regval = devm_kcalloc(&pdev->dev, bgp->conf->sensor_count, in ti_bandgap_build()
842 sizeof(*bgp->regval), GFP_KERNEL); in ti_bandgap_build()
843 if (!bgp->regval) in ti_bandgap_build()
855 bgp->base = chunk; in ti_bandgap_build()
862 if (TI_BANDGAP_HAS(bgp, TSHUT)) { in ti_bandgap_build()
863 bgp->tshut_gpiod = devm_gpiod_get(&pdev->dev, NULL, GPIOD_IN); in ti_bandgap_build()
864 if (IS_ERR(bgp->tshut_gpiod)) { in ti_bandgap_build()
866 return ERR_CAST(bgp->tshut_gpiod); in ti_bandgap_build()
870 return bgp; in ti_bandgap_build()
889 struct ti_bandgap *bgp; in ti_bandgap_probe() local
892 bgp = ti_bandgap_build(pdev); in ti_bandgap_probe()
893 if (IS_ERR(bgp)) { in ti_bandgap_probe()
895 return PTR_ERR(bgp); in ti_bandgap_probe()
897 bgp->dev = &pdev->dev; in ti_bandgap_probe()
899 if (TI_BANDGAP_HAS(bgp, UNRELIABLE)) in ti_bandgap_probe()
903 if (TI_BANDGAP_HAS(bgp, TSHUT)) { in ti_bandgap_probe()
904 ret = ti_bandgap_tshut_init(bgp, pdev); in ti_bandgap_probe()
912 bgp->fclock = clk_get(NULL, bgp->conf->fclock_name); in ti_bandgap_probe()
913 if (IS_ERR(bgp->fclock)) { in ti_bandgap_probe()
915 ret = PTR_ERR(bgp->fclock); in ti_bandgap_probe()
919 bgp->div_clk = clk_get(NULL, bgp->conf->div_ck_name); in ti_bandgap_probe()
920 if (IS_ERR(bgp->div_clk)) { in ti_bandgap_probe()
922 ret = PTR_ERR(bgp->div_clk); in ti_bandgap_probe()
926 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_probe()
930 tsr = bgp->conf->sensors[i].registers; in ti_bandgap_probe()
936 val = ti_bandgap_readl(bgp, tsr->bgap_efuse); in ti_bandgap_probe()
942 clk_rate = clk_round_rate(bgp->div_clk, in ti_bandgap_probe()
943 bgp->conf->sensors[0].ts_data->max_freq); in ti_bandgap_probe()
944 if (clk_rate < bgp->conf->sensors[0].ts_data->min_freq || in ti_bandgap_probe()
951 ret = clk_set_rate(bgp->div_clk, clk_rate); in ti_bandgap_probe()
955 bgp->clk_rate = clk_rate; in ti_bandgap_probe()
956 if (TI_BANDGAP_HAS(bgp, CLK_CTRL)) in ti_bandgap_probe()
957 clk_prepare_enable(bgp->fclock); in ti_bandgap_probe()
960 spin_lock_init(&bgp->lock); in ti_bandgap_probe()
961 bgp->dev = &pdev->dev; in ti_bandgap_probe()
962 platform_set_drvdata(pdev, bgp); in ti_bandgap_probe()
964 ti_bandgap_power(bgp, true); in ti_bandgap_probe()
967 if (TI_BANDGAP_HAS(bgp, COUNTER)) in ti_bandgap_probe()
968 for (i = 0; i < bgp->conf->sensor_count; i++) in ti_bandgap_probe()
969 RMW_BITS(bgp, i, bgap_counter, counter_mask, 1); in ti_bandgap_probe()
972 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_probe()
975 ts_data = bgp->conf->sensors[i].ts_data; in ti_bandgap_probe()
977 if (TI_BANDGAP_HAS(bgp, TALERT)) { in ti_bandgap_probe()
979 RMW_BITS(bgp, i, bgap_threshold, in ti_bandgap_probe()
981 RMW_BITS(bgp, i, bgap_threshold, in ti_bandgap_probe()
984 RMW_BITS(bgp, i, bgap_mask_ctrl, mask_hot_mask, 1); in ti_bandgap_probe()
985 RMW_BITS(bgp, i, bgap_mask_ctrl, mask_cold_mask, 1); in ti_bandgap_probe()
988 if (TI_BANDGAP_HAS(bgp, TSHUT_CONFIG)) { in ti_bandgap_probe()
990 RMW_BITS(bgp, i, tshut_threshold, in ti_bandgap_probe()
992 RMW_BITS(bgp, i, tshut_threshold, in ti_bandgap_probe()
997 if (TI_BANDGAP_HAS(bgp, MODE_CONFIG)) in ti_bandgap_probe()
998 ti_bandgap_set_continuous_mode(bgp); in ti_bandgap_probe()
1001 if (TI_BANDGAP_HAS(bgp, COUNTER)) in ti_bandgap_probe()
1002 for (i = 0; i < bgp->conf->sensor_count; i++) in ti_bandgap_probe()
1003 RMW_BITS(bgp, i, bgap_counter, counter_mask, in ti_bandgap_probe()
1004 bgp->clk_rate / 4); in ti_bandgap_probe()
1007 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_probe()
1010 if (bgp->conf->sensors[i].register_cooling) { in ti_bandgap_probe()
1011 ret = bgp->conf->sensors[i].register_cooling(bgp, i); in ti_bandgap_probe()
1016 if (bgp->conf->expose_sensor) { in ti_bandgap_probe()
1017 domain = bgp->conf->sensors[i].domain; in ti_bandgap_probe()
1018 ret = bgp->conf->expose_sensor(bgp, i, domain); in ti_bandgap_probe()
1029 if (TI_BANDGAP_HAS(bgp, TALERT)) { in ti_bandgap_probe()
1030 ret = ti_bandgap_talert_init(bgp, pdev); in ti_bandgap_probe()
1033 i = bgp->conf->sensor_count; in ti_bandgap_probe()
1039 bgp->nb.notifier_call = bandgap_omap_cpu_notifier; in ti_bandgap_probe()
1041 cpu_pm_register_notifier(&bgp->nb); in ti_bandgap_probe()
1047 if (bgp->conf->sensors[i].unregister_cooling) in ti_bandgap_probe()
1048 bgp->conf->sensors[i].unregister_cooling(bgp, i); in ti_bandgap_probe()
1051 if (bgp->conf->sensors[i].unregister_cooling) in ti_bandgap_probe()
1052 bgp->conf->sensors[i].unregister_cooling(bgp, i); in ti_bandgap_probe()
1053 if (bgp->conf->remove_sensor) in ti_bandgap_probe()
1054 bgp->conf->remove_sensor(bgp, i); in ti_bandgap_probe()
1056 ti_bandgap_power(bgp, false); in ti_bandgap_probe()
1058 if (TI_BANDGAP_HAS(bgp, CLK_CTRL)) in ti_bandgap_probe()
1059 clk_disable_unprepare(bgp->fclock); in ti_bandgap_probe()
1061 clk_put(bgp->div_clk); in ti_bandgap_probe()
1063 clk_put(bgp->fclock); in ti_bandgap_probe()
1065 if (TI_BANDGAP_HAS(bgp, TSHUT)) in ti_bandgap_probe()
1066 free_irq(gpiod_to_irq(bgp->tshut_gpiod), NULL); in ti_bandgap_probe()
1074 struct ti_bandgap *bgp = platform_get_drvdata(pdev); in ti_bandgap_remove() local
1078 cpu_pm_unregister_notifier(&bgp->nb); in ti_bandgap_remove()
1081 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_remove()
1082 if (bgp->conf->sensors[i].unregister_cooling) in ti_bandgap_remove()
1083 bgp->conf->sensors[i].unregister_cooling(bgp, i); in ti_bandgap_remove()
1085 if (bgp->conf->remove_sensor) in ti_bandgap_remove()
1086 bgp->conf->remove_sensor(bgp, i); in ti_bandgap_remove()
1089 ti_bandgap_power(bgp, false); in ti_bandgap_remove()
1091 if (TI_BANDGAP_HAS(bgp, CLK_CTRL)) in ti_bandgap_remove()
1092 clk_disable_unprepare(bgp->fclock); in ti_bandgap_remove()
1093 clk_put(bgp->fclock); in ti_bandgap_remove()
1094 clk_put(bgp->div_clk); in ti_bandgap_remove()
1096 if (TI_BANDGAP_HAS(bgp, TALERT)) in ti_bandgap_remove()
1097 free_irq(bgp->irq, bgp); in ti_bandgap_remove()
1099 if (TI_BANDGAP_HAS(bgp, TSHUT)) in ti_bandgap_remove()
1100 free_irq(gpiod_to_irq(bgp->tshut_gpiod), NULL); in ti_bandgap_remove()
1106 static int ti_bandgap_save_ctxt(struct ti_bandgap *bgp) in ti_bandgap_save_ctxt() argument
1110 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_save_ctxt()
1114 rval = &bgp->regval[i]; in ti_bandgap_save_ctxt()
1115 tsr = bgp->conf->sensors[i].registers; in ti_bandgap_save_ctxt()
1117 if (TI_BANDGAP_HAS(bgp, MODE_CONFIG)) in ti_bandgap_save_ctxt()
1118 rval->bg_mode_ctrl = ti_bandgap_readl(bgp, in ti_bandgap_save_ctxt()
1120 if (TI_BANDGAP_HAS(bgp, COUNTER)) in ti_bandgap_save_ctxt()
1121 rval->bg_counter = ti_bandgap_readl(bgp, in ti_bandgap_save_ctxt()
1123 if (TI_BANDGAP_HAS(bgp, TALERT)) { in ti_bandgap_save_ctxt()
1124 rval->bg_threshold = ti_bandgap_readl(bgp, in ti_bandgap_save_ctxt()
1126 rval->bg_ctrl = ti_bandgap_readl(bgp, in ti_bandgap_save_ctxt()
1130 if (TI_BANDGAP_HAS(bgp, TSHUT_CONFIG)) in ti_bandgap_save_ctxt()
1131 rval->tshut_threshold = ti_bandgap_readl(bgp, in ti_bandgap_save_ctxt()
1138 static int ti_bandgap_restore_ctxt(struct ti_bandgap *bgp) in ti_bandgap_restore_ctxt() argument
1142 for (i = 0; i < bgp->conf->sensor_count; i++) { in ti_bandgap_restore_ctxt()
1146 rval = &bgp->regval[i]; in ti_bandgap_restore_ctxt()
1147 tsr = bgp->conf->sensors[i].registers; in ti_bandgap_restore_ctxt()
1149 if (TI_BANDGAP_HAS(bgp, TSHUT_CONFIG)) in ti_bandgap_restore_ctxt()
1150 ti_bandgap_writel(bgp, rval->tshut_threshold, in ti_bandgap_restore_ctxt()
1155 ti_bandgap_force_single_read(bgp, i); in ti_bandgap_restore_ctxt()
1157 if (TI_BANDGAP_HAS(bgp, COUNTER)) in ti_bandgap_restore_ctxt()
1158 ti_bandgap_writel(bgp, rval->bg_counter, in ti_bandgap_restore_ctxt()
1160 if (TI_BANDGAP_HAS(bgp, MODE_CONFIG)) in ti_bandgap_restore_ctxt()
1161 ti_bandgap_writel(bgp, rval->bg_mode_ctrl, in ti_bandgap_restore_ctxt()
1163 if (TI_BANDGAP_HAS(bgp, TALERT)) { in ti_bandgap_restore_ctxt()
1164 ti_bandgap_writel(bgp, rval->bg_threshold, in ti_bandgap_restore_ctxt()
1166 ti_bandgap_writel(bgp, rval->bg_ctrl, in ti_bandgap_restore_ctxt()
1176 struct ti_bandgap *bgp = dev_get_drvdata(dev); in ti_bandgap_suspend() local
1179 err = ti_bandgap_save_ctxt(bgp); in ti_bandgap_suspend()
1180 ti_bandgap_power(bgp, false); in ti_bandgap_suspend()
1182 if (TI_BANDGAP_HAS(bgp, CLK_CTRL)) in ti_bandgap_suspend()
1183 clk_disable_unprepare(bgp->fclock); in ti_bandgap_suspend()
1185 bgp->is_suspended = true; in ti_bandgap_suspend()
1193 struct ti_bandgap *bgp; in bandgap_omap_cpu_notifier() local
1195 bgp = container_of(nb, struct ti_bandgap, nb); in bandgap_omap_cpu_notifier()
1197 spin_lock(&bgp->lock); in bandgap_omap_cpu_notifier()
1200 if (bgp->is_suspended) in bandgap_omap_cpu_notifier()
1202 ti_bandgap_save_ctxt(bgp); in bandgap_omap_cpu_notifier()
1203 ti_bandgap_power(bgp, false); in bandgap_omap_cpu_notifier()
1204 if (TI_BANDGAP_HAS(bgp, CLK_CTRL)) in bandgap_omap_cpu_notifier()
1205 clk_disable(bgp->fclock); in bandgap_omap_cpu_notifier()
1209 if (bgp->is_suspended) in bandgap_omap_cpu_notifier()
1211 if (TI_BANDGAP_HAS(bgp, CLK_CTRL)) in bandgap_omap_cpu_notifier()
1212 clk_enable(bgp->fclock); in bandgap_omap_cpu_notifier()
1213 ti_bandgap_power(bgp, true); in bandgap_omap_cpu_notifier()
1214 ti_bandgap_restore_ctxt(bgp); in bandgap_omap_cpu_notifier()
1217 spin_unlock(&bgp->lock); in bandgap_omap_cpu_notifier()
1224 struct ti_bandgap *bgp = dev_get_drvdata(dev); in ti_bandgap_resume() local
1226 if (TI_BANDGAP_HAS(bgp, CLK_CTRL)) in ti_bandgap_resume()
1227 clk_prepare_enable(bgp->fclock); in ti_bandgap_resume()
1229 ti_bandgap_power(bgp, true); in ti_bandgap_resume()
1230 bgp->is_suspended = false; in ti_bandgap_resume()
1232 return ti_bandgap_restore_ctxt(bgp); in ti_bandgap_resume()