int abx500_hwmon_init(struct abx500_temp *data) { struct ab8500_temp *ab8500_data; ab8500_data = devm_kzalloc(&data->pdev->dev, sizeof(*ab8500_data), GFP_KERNEL); if (!ab8500_data) return -ENOMEM; ab8500_data->gpadc = ab8500_gpadc_get("ab8500-gpadc.0"); if (IS_ERR(ab8500_data->gpadc)) return PTR_ERR(ab8500_data->gpadc); ab8500_data->btemp = ab8500_btemp_get(); if (IS_ERR(ab8500_data->btemp)) return PTR_ERR(ab8500_data->btemp); INIT_DELAYED_WORK(&ab8500_data->power_off_work, ab8500_thermal_power_off); ab8500_data->cfg.vcc = THERMAL_VCC; ab8500_data->cfg.r_up = PULL_UP_RESISTOR; ab8500_data->cfg.temp_tbl = ab8500_temp_tbl_a_thermistor; ab8500_data->cfg.tbl_sz = ab8500_temp_tbl_a_size; data->plat_data = ab8500_data; /* * ADC_AUX1 and ADC_AUX2, connected to external NTC * BTEMP_BALL and BAT_CTRL, fixed usage */ data->gpadc_addr[0] = ADC_AUX1; data->gpadc_addr[1] = ADC_AUX2; data->gpadc_addr[2] = BTEMP_BALL; data->gpadc_addr[3] = BAT_CTRL; data->monitored_sensors = NUM_MONITORED_SENSORS; data->ops.read_sensor = ab8500_read_sensor; data->ops.irq_handler = ab8500_temp_irq_handler; data->ops.show_name = ab8500_show_name; data->ops.show_label = ab8500_show_label; data->ops.is_visible = NULL; return 0; }
int __init abx500_hwmon_init(struct abx500_temp *data) { data->ab8500_gpadc = ab8500_gpadc_get(); if (IS_ERR(data->ab8500_gpadc)) return PTR_ERR(data->ab8500_gpadc); data->ab8500_btemp = ab8500_btemp_get(); if (IS_ERR(data->ab8500_btemp)) return PTR_ERR(data->ab8500_btemp); INIT_DELAYED_WORK(&data->power_off_work, ab8500_thermal_power_off); /* * Setup HW defined data. * * Reference hardware (HREF): * * GPADC - ADC_AUX1, connected to NTC R2148 next to RTC_XTAL on HREF * GPADC - ADC_AUX2, connected to NTC R2150 near DB8500 on HREF * Hence, temp#_min/max/max_hyst refer to millivolts and not * millidegrees * This is not the case for BAT_CTRL where millidegrees is used * * HREF HW does not support reading AB8500 temperature. BUT an * AB8500 IRQ will be launched if die crit temp limit is reached. * * Make sure indexes correspond to the attribute indexes * used when calling SENSOR_DEVICE_ATRR */ data->gpadc_addr[0] = ADC_AUX1; data->gpadc_addr[1] = ADC_AUX2; data->gpadc_addr[2] = BTEMP_BALL; data->gpadc_addr[3] = BAT_CTRL; data->gpadc_addr[4] = DIE_TEMP; data->power_off_delay = DEFAULT_POWER_OFF_DELAY; data->monitored_sensors = NUM_MONITORED_SENSORS; data->ops.read_sensor = ab8500_read_sensor; data->ops.irq_handler = ab8500_temp_irq_handler; data->ops.show_name = ab8500_show_name; data->ops.show_label = ab8500_show_label; return 0; }