Lines Matching refs:data

126 /* Common and NCT6683 specific data */
496 static u16 nct6683_read(struct nct6683_data *data, u16 reg)
500 outb_p(0xff, data->addr + EC_PAGE_REG); /* unlock */
501 outb_p(reg >> 8, data->addr + EC_PAGE_REG);
502 outb_p(reg & 0xff, data->addr + EC_INDEX_REG);
503 res = inb_p(data->addr + EC_DATA_REG);
507 static u16 nct6683_read16(struct nct6683_data *data, u16 reg)
509 return (nct6683_read(data, reg) << 8) | nct6683_read(data, reg + 1);
512 static void nct6683_write(struct nct6683_data *data, u16 reg, u16 value)
514 outb_p(0xff, data->addr + EC_PAGE_REG); /* unlock */
515 outb_p(reg >> 8, data->addr + EC_PAGE_REG);
516 outb_p(reg & 0xff, data->addr + EC_INDEX_REG);
517 outb_p(value & 0xff, data->addr + EC_DATA_REG);
520 static int get_in_reg(struct nct6683_data *data, int nr, int index)
522 int ch = data->in_index[index];
530 if (data->customer_id != NCT6683_CUSTOMER_ID_INTEL)
534 if (data->customer_id != NCT6683_CUSTOMER_ID_INTEL)
543 static int get_temp_reg(struct nct6683_data *data, int nr, int index)
545 int ch = data->temp_index[index];
548 switch (data->customer_id) {
584 struct nct6683_data *data = dev_get_drvdata(dev);
588 if (!(data->have_pwm & (1 << i)))
590 data->pwm[i] = nct6683_read(data, NCT6683_REG_PWM(i));
596 struct nct6683_data *data = dev_get_drvdata(dev);
599 mutex_lock(&data->update_lock);
601 if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
603 for (i = 0; i < data->in_num; i++) {
605 int reg = get_in_reg(data, j, i);
608 data->in[j][i] =
609 nct6683_read(data, reg);
614 for (i = 0; i < data->temp_num; i++) {
615 u8 ch = data->temp_index[i];
617 data->temp_in[i] = nct6683_read16(data,
620 int reg = get_temp_reg(data, j, i);
623 data->temp[j][i] =
624 nct6683_read(data, reg);
629 for (i = 0; i < ARRAY_SIZE(data->rpm); i++) {
630 if (!(data->have_fan & (1 << i)))
633 data->rpm[i] = nct6683_read16(data,
635 data->fan_min[i] = nct6683_read16(data,
641 data->last_updated = jiffies;
642 data->valid = true;
645 mutex_unlock(&data->update_lock);
646 return data;
656 struct nct6683_data *data = nct6683_update_device(dev);
659 return sprintf(buf, "%s\n", nct6683_mon_label[data->in_src[nr]]);
666 struct nct6683_data *data = nct6683_update_device(dev);
671 in_from_reg(data->in[index][nr], data->in_index[index]));
678 struct nct6683_data *data = dev_get_drvdata(dev);
686 data->customer_id == NCT6683_CUSTOMER_ID_INTEL)
714 struct nct6683_data *data = nct6683_update_device(dev);
716 return sprintf(buf, "%d\n", data->rpm[sattr->index]);
722 struct nct6683_data *data = nct6683_update_device(dev);
726 return sprintf(buf, "%d\n", data->fan_min[nr]);
733 struct nct6683_data *data = nct6683_update_device(dev);
736 ((data->fanin_cfg[sattr->index] >> 5) & 0x03) + 1);
743 struct nct6683_data *data = dev_get_drvdata(dev);
747 if (!(data->have_fan & (1 << fan)))
754 if (nr == 2 && data->customer_id == NCT6683_CUSTOMER_ID_INTEL)
786 struct nct6683_data *data = nct6683_update_device(dev);
789 return sprintf(buf, "%s\n", nct6683_mon_label[data->temp_src[nr]]);
796 struct nct6683_data *data = nct6683_update_device(dev);
800 return sprintf(buf, "%d\n", data->temp[index][nr] * 1000);
807 struct nct6683_data *data = nct6683_update_device(dev);
809 int temp = data->temp[1][nr] - data->temp[2][nr];
818 struct nct6683_data *data = nct6683_update_device(dev);
821 return sprintf(buf, "%d\n", (data->temp_in[index] / 128) * 500);
851 struct nct6683_data *data = nct6683_update_device(dev);
854 return sprintf(buf, "%d\n", get_temp_type(data->temp_src[nr]));
861 struct nct6683_data *data = dev_get_drvdata(dev);
870 data->customer_id == NCT6683_CUSTOMER_ID_INTEL)
873 if (nr == 6 && get_temp_type(data->temp_src[temp]) == 0)
913 struct nct6683_data *data = nct6683_update_device(dev);
917 return sprintf(buf, "%d\n", data->pwm[index]);
925 struct nct6683_data *data = dev_get_drvdata(dev);
932 mutex_lock(&data->update_lock);
933 nct6683_write(data, NCT6683_REG_FAN_CFG_CTRL, NCT6683_FAN_CFG_REQ);
935 nct6683_write(data, NCT6683_REG_PWM_WRITE(index), val);
936 nct6683_write(data, NCT6683_REG_FAN_CFG_CTRL, NCT6683_FAN_CFG_DONE);
937 mutex_unlock(&data->update_lock);
948 struct nct6683_data *data = dev_get_drvdata(dev);
951 if (!(data->have_pwm & (1 << pwm)))
955 if (data->customer_id == NCT6683_CUSTOMER_ID_MITAC)
975 struct nct6683_data *data = dev_get_drvdata(dev);
979 mutex_lock(&data->update_lock);
981 ret = superio_enter(data->sioreg);
984 superio_select(data->sioreg, NCT6683_LD_HWM);
985 reg = superio_inb(data->sioreg, NCT6683_REG_CR_BEEP);
986 superio_exit(data->sioreg);
988 mutex_unlock(&data->update_lock);
993 mutex_unlock(&data->update_lock);
1001 struct nct6683_data *data = dev_get_drvdata(dev);
1009 mutex_lock(&data->update_lock);
1011 ret = superio_enter(data->sioreg);
1017 superio_select(data->sioreg, NCT6683_LD_HWM);
1018 reg = superio_inb(data->sioreg, NCT6683_REG_CR_BEEP);
1023 superio_outb(data->sioreg, NCT6683_REG_CR_BEEP, reg);
1024 superio_exit(data->sioreg);
1026 mutex_unlock(&data->update_lock);
1036 struct nct6683_data *data = dev_get_drvdata(dev);
1040 mutex_lock(&data->update_lock);
1042 ret = superio_enter(data->sioreg);
1045 superio_select(data->sioreg, NCT6683_LD_ACPI);
1046 reg = superio_inb(data->sioreg, NCT6683_REG_CR_CASEOPEN);
1047 superio_exit(data->sioreg);
1049 mutex_unlock(&data->update_lock);
1054 mutex_unlock(&data->update_lock);
1062 struct nct6683_data *data = dev_get_drvdata(dev);
1070 mutex_lock(&data->update_lock);
1077 ret = superio_enter(data->sioreg);
1083 superio_select(data->sioreg, NCT6683_LD_ACPI);
1084 reg = superio_inb(data->sioreg, NCT6683_REG_CR_CASEOPEN);
1086 superio_outb(data->sioreg, NCT6683_REG_CR_CASEOPEN, reg);
1088 superio_outb(data->sioreg, NCT6683_REG_CR_CASEOPEN, reg);
1089 superio_exit(data->sioreg);
1091 data->valid = false; /* Force cache refresh */
1093 mutex_unlock(&data->update_lock);
1111 static inline void nct6683_init_device(struct nct6683_data *data)
1116 tmp = nct6683_read(data, NCT6683_HWM_CFG);
1118 nct6683_write(data, NCT6683_HWM_CFG, tmp | 0x80);
1126 nct6683_setup_fans(struct nct6683_data *data)
1132 reg = nct6683_read(data, NCT6683_REG_FANIN_CFG(i));
1134 data->have_fan |= 1 << i;
1135 data->fanin_cfg[i] = reg;
1138 reg = nct6683_read(data, NCT6683_REG_FANOUT_CFG(i));
1140 data->have_pwm |= 1 << i;
1141 data->fanout_cfg[i] = reg;
1161 static void nct6683_setup_sensors(struct nct6683_data *data)
1166 data->temp_num = 0;
1167 data->in_num = 0;
1169 reg = nct6683_read(data, NCT6683_REG_MON_CFG(i)) & 0x7f;
1177 data->temp_index[data->temp_num] = i;
1178 data->temp_src[data->temp_num] = reg;
1179 data->temp_num++;
1181 data->in_index[data->in_num] = i;
1182 data->in_src[data->in_num] = reg;
1183 data->in_num++;
1193 struct nct6683_data *data;
1203 data = devm_kzalloc(dev, sizeof(struct nct6683_data), GFP_KERNEL);
1204 if (!data)
1207 data->kind = sio_data->kind;
1208 data->sioreg = sio_data->sioreg;
1209 data->addr = res->start;
1210 mutex_init(&data->update_lock);
1211 platform_set_drvdata(pdev, data);
1213 data->customer_id = nct6683_read16(data, NCT6683_REG_CUSTOMER_ID);
1216 switch (data->customer_id) {
1226 nct6683_init_device(data);
1227 nct6683_setup_fans(data);
1228 nct6683_setup_sensors(data);
1232 if (data->have_pwm) {
1235 fls(data->have_pwm));
1238 data->groups[groups++] = group;
1241 if (data->in_num) {
1244 data->in_num);
1247 data->groups[groups++] = group;
1250 if (data->have_fan) {
1253 fls(data->have_fan));
1256 data->groups[groups++] = group;
1259 if (data->temp_num) {
1262 data->temp_num);
1265 data->groups[groups++] = group;
1267 data->groups[groups++] = &nct6683_group_other;
1269 if (data->customer_id == NCT6683_CUSTOMER_ID_INTEL)
1271 nct6683_read(data, NCT6683_REG_BUILD_MONTH),
1272 nct6683_read(data, NCT6683_REG_BUILD_DAY),
1273 nct6683_read(data, NCT6683_REG_BUILD_YEAR));
1276 nct6683_read(data, NCT6683_REG_BUILD_MONTH),
1277 nct6683_read(data, NCT6683_REG_BUILD_DAY),
1278 nct6683_read(data, NCT6683_REG_BUILD_YEAR));
1281 nct6683_chip_names[data->kind],
1282 nct6683_read(data, NCT6683_REG_VERSION_HI),
1283 nct6683_read(data, NCT6683_REG_VERSION_LO),
1287 nct6683_device_names[data->kind], data, data->groups);
1294 struct nct6683_data *data = nct6683_update_device(dev);
1296 mutex_lock(&data->update_lock);
1297 data->hwm_cfg = nct6683_read(data, NCT6683_HWM_CFG);
1298 mutex_unlock(&data->update_lock);
1305 struct nct6683_data *data = dev_get_drvdata(dev);
1307 mutex_lock(&data->update_lock);
1309 nct6683_write(data, NCT6683_HWM_CFG, data->hwm_cfg);
1312 data->valid = false;
1313 mutex_unlock(&data->update_lock);