Lines Matching refs:data

498 static u16 nct6683_read(struct nct6683_data *data, u16 reg)  in nct6683_read()  argument
502 outb_p(0xff, data->addr + EC_PAGE_REG); /* unlock */ in nct6683_read()
503 outb_p(reg >> 8, data->addr + EC_PAGE_REG); in nct6683_read()
504 outb_p(reg & 0xff, data->addr + EC_INDEX_REG); in nct6683_read()
505 res = inb_p(data->addr + EC_DATA_REG); in nct6683_read()
509 static u16 nct6683_read16(struct nct6683_data *data, u16 reg) in nct6683_read16() argument
511 return (nct6683_read(data, reg) << 8) | nct6683_read(data, reg + 1); in nct6683_read16()
514 static void nct6683_write(struct nct6683_data *data, u16 reg, u16 value) in nct6683_write() argument
516 outb_p(0xff, data->addr + EC_PAGE_REG); /* unlock */ in nct6683_write()
517 outb_p(reg >> 8, data->addr + EC_PAGE_REG); in nct6683_write()
518 outb_p(reg & 0xff, data->addr + EC_INDEX_REG); in nct6683_write()
519 outb_p(value & 0xff, data->addr + EC_DATA_REG); in nct6683_write()
522 static int get_in_reg(struct nct6683_data *data, int nr, int index) in get_in_reg() argument
524 int ch = data->in_index[index]; in get_in_reg()
532 if (data->customer_id != NCT6683_CUSTOMER_ID_INTEL) in get_in_reg()
536 if (data->customer_id != NCT6683_CUSTOMER_ID_INTEL) in get_in_reg()
545 static int get_temp_reg(struct nct6683_data *data, int nr, int index) in get_temp_reg() argument
547 int ch = data->temp_index[index]; in get_temp_reg()
550 switch (data->customer_id) { in get_temp_reg()
585 struct nct6683_data *data = dev_get_drvdata(dev); in nct6683_update_pwm() local
589 if (!(data->have_pwm & (1 << i))) in nct6683_update_pwm()
591 data->pwm[i] = nct6683_read(data, NCT6683_REG_PWM(i)); in nct6683_update_pwm()
597 struct nct6683_data *data = dev_get_drvdata(dev); in nct6683_update_device() local
600 mutex_lock(&data->update_lock); in nct6683_update_device()
602 if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { in nct6683_update_device()
604 for (i = 0; i < data->in_num; i++) { in nct6683_update_device()
606 int reg = get_in_reg(data, j, i); in nct6683_update_device()
609 data->in[j][i] = in nct6683_update_device()
610 nct6683_read(data, reg); in nct6683_update_device()
615 for (i = 0; i < data->temp_num; i++) { in nct6683_update_device()
616 u8 ch = data->temp_index[i]; in nct6683_update_device()
618 data->temp_in[i] = nct6683_read16(data, in nct6683_update_device()
621 int reg = get_temp_reg(data, j, i); in nct6683_update_device()
624 data->temp[j][i] = in nct6683_update_device()
625 nct6683_read(data, reg); in nct6683_update_device()
630 for (i = 0; i < ARRAY_SIZE(data->rpm); i++) { in nct6683_update_device()
631 if (!(data->have_fan & (1 << i))) in nct6683_update_device()
634 data->rpm[i] = nct6683_read16(data, in nct6683_update_device()
636 data->fan_min[i] = nct6683_read16(data, in nct6683_update_device()
642 data->last_updated = jiffies; in nct6683_update_device()
643 data->valid = true; in nct6683_update_device()
646 mutex_unlock(&data->update_lock); in nct6683_update_device()
647 return data; in nct6683_update_device()
657 struct nct6683_data *data = nct6683_update_device(dev); in show_in_label() local
660 return sprintf(buf, "%s\n", nct6683_mon_label[data->in_src[nr]]); in show_in_label()
667 struct nct6683_data *data = nct6683_update_device(dev); in show_in_reg() local
672 in_from_reg(data->in[index][nr], data->in_index[index])); in show_in_reg()
679 struct nct6683_data *data = dev_get_drvdata(dev); in nct6683_in_is_visible() local
687 data->customer_id == NCT6683_CUSTOMER_ID_INTEL) in nct6683_in_is_visible()
715 struct nct6683_data *data = nct6683_update_device(dev); in show_fan() local
717 return sprintf(buf, "%d\n", data->rpm[sattr->index]); in show_fan()
723 struct nct6683_data *data = nct6683_update_device(dev); in show_fan_min() local
727 return sprintf(buf, "%d\n", data->fan_min[nr]); in show_fan_min()
734 struct nct6683_data *data = nct6683_update_device(dev); in show_fan_pulses() local
737 ((data->fanin_cfg[sattr->index] >> 5) & 0x03) + 1); in show_fan_pulses()
744 struct nct6683_data *data = dev_get_drvdata(dev); in nct6683_fan_is_visible() local
748 if (!(data->have_fan & (1 << fan))) in nct6683_fan_is_visible()
755 if (nr == 2 && data->customer_id == NCT6683_CUSTOMER_ID_INTEL) in nct6683_fan_is_visible()
787 struct nct6683_data *data = nct6683_update_device(dev); in show_temp_label() local
790 return sprintf(buf, "%s\n", nct6683_mon_label[data->temp_src[nr]]); in show_temp_label()
797 struct nct6683_data *data = nct6683_update_device(dev); in show_temp8() local
801 return sprintf(buf, "%d\n", data->temp[index][nr] * 1000); in show_temp8()
808 struct nct6683_data *data = nct6683_update_device(dev); in show_temp_hyst() local
810 int temp = data->temp[1][nr] - data->temp[2][nr]; in show_temp_hyst()
819 struct nct6683_data *data = nct6683_update_device(dev); in show_temp16() local
822 return sprintf(buf, "%d\n", (data->temp_in[index] / 128) * 500); in show_temp16()
852 struct nct6683_data *data = nct6683_update_device(dev); in show_temp_type() local
855 return sprintf(buf, "%d\n", get_temp_type(data->temp_src[nr])); in show_temp_type()
862 struct nct6683_data *data = dev_get_drvdata(dev); in nct6683_temp_is_visible() local
871 data->customer_id == NCT6683_CUSTOMER_ID_INTEL) in nct6683_temp_is_visible()
874 if (nr == 6 && get_temp_type(data->temp_src[temp]) == 0) in nct6683_temp_is_visible()
914 struct nct6683_data *data = nct6683_update_device(dev); in show_pwm() local
918 return sprintf(buf, "%d\n", data->pwm[index]); in show_pwm()
927 struct nct6683_data *data = dev_get_drvdata(dev); in nct6683_pwm_is_visible() local
930 if (!(data->have_pwm & (1 << pwm))) in nct6683_pwm_is_visible()
950 struct nct6683_data *data = dev_get_drvdata(dev); in show_global_beep() local
954 mutex_lock(&data->update_lock); in show_global_beep()
956 ret = superio_enter(data->sioreg); in show_global_beep()
959 superio_select(data->sioreg, NCT6683_LD_HWM); in show_global_beep()
960 reg = superio_inb(data->sioreg, NCT6683_REG_CR_BEEP); in show_global_beep()
961 superio_exit(data->sioreg); in show_global_beep()
963 mutex_unlock(&data->update_lock); in show_global_beep()
968 mutex_unlock(&data->update_lock); in show_global_beep()
976 struct nct6683_data *data = dev_get_drvdata(dev); in store_global_beep() local
984 mutex_lock(&data->update_lock); in store_global_beep()
986 ret = superio_enter(data->sioreg); in store_global_beep()
992 superio_select(data->sioreg, NCT6683_LD_HWM); in store_global_beep()
993 reg = superio_inb(data->sioreg, NCT6683_REG_CR_BEEP); in store_global_beep()
998 superio_outb(data->sioreg, NCT6683_REG_CR_BEEP, reg); in store_global_beep()
999 superio_exit(data->sioreg); in store_global_beep()
1001 mutex_unlock(&data->update_lock); in store_global_beep()
1010 struct nct6683_data *data = dev_get_drvdata(dev); in show_caseopen() local
1014 mutex_lock(&data->update_lock); in show_caseopen()
1016 ret = superio_enter(data->sioreg); in show_caseopen()
1019 superio_select(data->sioreg, NCT6683_LD_ACPI); in show_caseopen()
1020 reg = superio_inb(data->sioreg, NCT6683_REG_CR_CASEOPEN); in show_caseopen()
1021 superio_exit(data->sioreg); in show_caseopen()
1023 mutex_unlock(&data->update_lock); in show_caseopen()
1028 mutex_unlock(&data->update_lock); in show_caseopen()
1036 struct nct6683_data *data = dev_get_drvdata(dev); in clear_caseopen() local
1044 mutex_lock(&data->update_lock); in clear_caseopen()
1051 ret = superio_enter(data->sioreg); in clear_caseopen()
1057 superio_select(data->sioreg, NCT6683_LD_ACPI); in clear_caseopen()
1058 reg = superio_inb(data->sioreg, NCT6683_REG_CR_CASEOPEN); in clear_caseopen()
1060 superio_outb(data->sioreg, NCT6683_REG_CR_CASEOPEN, reg); in clear_caseopen()
1062 superio_outb(data->sioreg, NCT6683_REG_CR_CASEOPEN, reg); in clear_caseopen()
1063 superio_exit(data->sioreg); in clear_caseopen()
1065 data->valid = false; /* Force cache refresh */ in clear_caseopen()
1067 mutex_unlock(&data->update_lock); in clear_caseopen()
1087 static inline void nct6683_init_device(struct nct6683_data *data) in nct6683_init_device() argument
1092 tmp = nct6683_read(data, NCT6683_HWM_CFG); in nct6683_init_device()
1094 nct6683_write(data, NCT6683_HWM_CFG, tmp | 0x80); in nct6683_init_device()
1102 nct6683_setup_fans(struct nct6683_data *data) in nct6683_setup_fans() argument
1108 reg = nct6683_read(data, NCT6683_REG_FANIN_CFG(i)); in nct6683_setup_fans()
1110 data->have_fan |= 1 << i; in nct6683_setup_fans()
1111 data->fanin_cfg[i] = reg; in nct6683_setup_fans()
1114 reg = nct6683_read(data, NCT6683_REG_FANOUT_CFG(i)); in nct6683_setup_fans()
1116 data->have_pwm |= 1 << i; in nct6683_setup_fans()
1117 data->fanout_cfg[i] = reg; in nct6683_setup_fans()
1137 static void nct6683_setup_sensors(struct nct6683_data *data) in nct6683_setup_sensors() argument
1142 data->temp_num = 0; in nct6683_setup_sensors()
1143 data->in_num = 0; in nct6683_setup_sensors()
1145 reg = nct6683_read(data, NCT6683_REG_MON_CFG(i)) & 0x7f; in nct6683_setup_sensors()
1153 data->temp_index[data->temp_num] = i; in nct6683_setup_sensors()
1154 data->temp_src[data->temp_num] = reg; in nct6683_setup_sensors()
1155 data->temp_num++; in nct6683_setup_sensors()
1157 data->in_index[data->in_num] = i; in nct6683_setup_sensors()
1158 data->in_src[data->in_num] = reg; in nct6683_setup_sensors()
1159 data->in_num++; in nct6683_setup_sensors()
1169 struct nct6683_data *data; in nct6683_probe() local
1178 data = devm_kzalloc(dev, sizeof(struct nct6683_data), GFP_KERNEL); in nct6683_probe()
1179 if (!data) in nct6683_probe()
1182 data->kind = sio_data->kind; in nct6683_probe()
1183 data->sioreg = sio_data->sioreg; in nct6683_probe()
1184 data->addr = res->start; in nct6683_probe()
1185 mutex_init(&data->update_lock); in nct6683_probe()
1186 platform_set_drvdata(pdev, data); in nct6683_probe()
1188 data->customer_id = nct6683_read16(data, NCT6683_REG_CUSTOMER_ID); in nct6683_probe()
1190 nct6683_init_device(data); in nct6683_probe()
1191 nct6683_setup_fans(data); in nct6683_probe()
1192 nct6683_setup_sensors(data); in nct6683_probe()
1196 if (data->have_pwm) { in nct6683_probe()
1199 fls(data->have_pwm)); in nct6683_probe()
1202 data->groups[groups++] = group; in nct6683_probe()
1205 if (data->in_num) { in nct6683_probe()
1208 data->in_num); in nct6683_probe()
1211 data->groups[groups++] = group; in nct6683_probe()
1214 if (data->have_fan) { in nct6683_probe()
1217 fls(data->have_fan)); in nct6683_probe()
1220 data->groups[groups++] = group; in nct6683_probe()
1223 if (data->temp_num) { in nct6683_probe()
1226 data->temp_num); in nct6683_probe()
1229 data->groups[groups++] = group; in nct6683_probe()
1231 data->groups[groups++] = &nct6683_group_other; in nct6683_probe()
1234 nct6683_chip_names[data->kind], in nct6683_probe()
1235 nct6683_read(data, NCT6683_REG_VERSION_HI), in nct6683_probe()
1236 nct6683_read(data, NCT6683_REG_VERSION_LO), in nct6683_probe()
1237 nct6683_read(data, NCT6683_REG_BUILD_MONTH), in nct6683_probe()
1238 nct6683_read(data, NCT6683_REG_BUILD_DAY), in nct6683_probe()
1239 nct6683_read(data, NCT6683_REG_BUILD_YEAR)); in nct6683_probe()
1242 nct6683_device_names[data->kind], data, data->groups); in nct6683_probe()
1249 struct nct6683_data *data = nct6683_update_device(dev); in nct6683_suspend() local
1251 mutex_lock(&data->update_lock); in nct6683_suspend()
1252 data->hwm_cfg = nct6683_read(data, NCT6683_HWM_CFG); in nct6683_suspend()
1253 mutex_unlock(&data->update_lock); in nct6683_suspend()
1260 struct nct6683_data *data = dev_get_drvdata(dev); in nct6683_resume() local
1262 mutex_lock(&data->update_lock); in nct6683_resume()
1264 nct6683_write(data, NCT6683_HWM_CFG, data->hwm_cfg); in nct6683_resume()
1267 data->valid = false; in nct6683_resume()
1268 mutex_unlock(&data->update_lock); in nct6683_resume()