Lines Matching refs:data

134 /* Common and NCT6683 specific data */
497 static u16 nct6683_read(struct nct6683_data *data, u16 reg)
501 outb_p(0xff, data->addr + EC_PAGE_REG); /* unlock */
502 outb_p(reg >> 8, data->addr + EC_PAGE_REG);
503 outb_p(reg & 0xff, data->addr + EC_INDEX_REG);
504 res = inb_p(data->addr + EC_DATA_REG);
508 static u16 nct6683_read16(struct nct6683_data *data, u16 reg)
510 return (nct6683_read(data, reg) << 8) | nct6683_read(data, reg + 1);
513 static void nct6683_write(struct nct6683_data *data, u16 reg, u16 value)
515 outb_p(0xff, data->addr + EC_PAGE_REG); /* unlock */
516 outb_p(reg >> 8, data->addr + EC_PAGE_REG);
517 outb_p(reg & 0xff, data->addr + EC_INDEX_REG);
518 outb_p(value & 0xff, data->addr + EC_DATA_REG);
521 static int get_in_reg(struct nct6683_data *data, int nr, int index)
523 int ch = data->in_index[index];
531 if (data->customer_id != NCT6683_CUSTOMER_ID_INTEL)
535 if (data->customer_id != NCT6683_CUSTOMER_ID_INTEL)
544 static int get_temp_reg(struct nct6683_data *data, int nr, int index)
546 int ch = data->temp_index[index];
549 switch (data->customer_id) {
585 struct nct6683_data *data = dev_get_drvdata(dev);
589 if (!(data->have_pwm & (1 << i)))
591 data->pwm[i] = nct6683_read(data, NCT6683_REG_PWM(i));
597 struct nct6683_data *data = dev_get_drvdata(dev);
600 mutex_lock(&data->update_lock);
602 if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
604 for (i = 0; i < data->in_num; i++) {
606 int reg = get_in_reg(data, j, i);
609 data->in[j][i] =
610 nct6683_read(data, reg);
615 for (i = 0; i < data->temp_num; i++) {
616 u8 ch = data->temp_index[i];
618 data->temp_in[i] = nct6683_read16(data,
621 int reg = get_temp_reg(data, j, i);
624 data->temp[j][i] =
625 nct6683_read(data, reg);
630 for (i = 0; i < ARRAY_SIZE(data->rpm); i++) {
631 if (!(data->have_fan & (1 << i)))
634 data->rpm[i] = nct6683_read16(data,
636 data->fan_min[i] = nct6683_read16(data,
642 data->last_updated = jiffies;
643 data->valid = true;
646 mutex_unlock(&data->update_lock);
647 return data;
657 struct nct6683_data *data = nct6683_update_device(dev);
660 return sprintf(buf, "%s\n", nct6683_mon_label[data->in_src[nr]]);
667 struct nct6683_data *data = nct6683_update_device(dev);
672 in_from_reg(data->in[index][nr], data->in_index[index]));
679 struct nct6683_data *data = dev_get_drvdata(dev);
687 data->customer_id == NCT6683_CUSTOMER_ID_INTEL)
715 struct nct6683_data *data = nct6683_update_device(dev);
717 return sprintf(buf, "%d\n", data->rpm[sattr->index]);
723 struct nct6683_data *data = nct6683_update_device(dev);
727 return sprintf(buf, "%d\n", data->fan_min[nr]);
734 struct nct6683_data *data = nct6683_update_device(dev);
737 ((data->fanin_cfg[sattr->index] >> 5) & 0x03) + 1);
744 struct nct6683_data *data = dev_get_drvdata(dev);
748 if (!(data->have_fan & (1 << fan)))
755 if (nr == 2 && data->customer_id == NCT6683_CUSTOMER_ID_INTEL)
787 struct nct6683_data *data = nct6683_update_device(dev);
790 return sprintf(buf, "%s\n", nct6683_mon_label[data->temp_src[nr]]);
797 struct nct6683_data *data = nct6683_update_device(dev);
801 return sprintf(buf, "%d\n", data->temp[index][nr] * 1000);
808 struct nct6683_data *data = nct6683_update_device(dev);
810 int temp = data->temp[1][nr] - data->temp[2][nr];
819 struct nct6683_data *data = nct6683_update_device(dev);
822 return sprintf(buf, "%d\n", (data->temp_in[index] / 128) * 500);
852 struct nct6683_data *data = nct6683_update_device(dev);
855 return sprintf(buf, "%d\n", get_temp_type(data->temp_src[nr]));
862 struct nct6683_data *data = dev_get_drvdata(dev);
871 data->customer_id == NCT6683_CUSTOMER_ID_INTEL)
874 if (nr == 6 && get_temp_type(data->temp_src[temp]) == 0)
914 struct nct6683_data *data = nct6683_update_device(dev);
918 return sprintf(buf, "%d\n", data->pwm[index]);
926 struct nct6683_data *data = dev_get_drvdata(dev);
933 mutex_lock(&data->update_lock);
934 nct6683_write(data, NCT6683_REG_FAN_CFG_CTRL, NCT6683_FAN_CFG_REQ);
936 nct6683_write(data, NCT6683_REG_PWM_WRITE(index), val);
937 nct6683_write(data, NCT6683_REG_FAN_CFG_CTRL, NCT6683_FAN_CFG_DONE);
938 mutex_unlock(&data->update_lock);
949 struct nct6683_data *data = dev_get_drvdata(dev);
952 if (!(data->have_pwm & (1 << pwm)))
956 if (data->customer_id == NCT6683_CUSTOMER_ID_MITAC)
976 struct nct6683_data *data = dev_get_drvdata(dev);
980 mutex_lock(&data->update_lock);
982 ret = superio_enter(data->sioreg);
985 superio_select(data->sioreg, NCT6683_LD_HWM);
986 reg = superio_inb(data->sioreg, NCT6683_REG_CR_BEEP);
987 superio_exit(data->sioreg);
989 mutex_unlock(&data->update_lock);
994 mutex_unlock(&data->update_lock);
1002 struct nct6683_data *data = dev_get_drvdata(dev);
1010 mutex_lock(&data->update_lock);
1012 ret = superio_enter(data->sioreg);
1018 superio_select(data->sioreg, NCT6683_LD_HWM);
1019 reg = superio_inb(data->sioreg, NCT6683_REG_CR_BEEP);
1024 superio_outb(data->sioreg, NCT6683_REG_CR_BEEP, reg);
1025 superio_exit(data->sioreg);
1027 mutex_unlock(&data->update_lock);
1037 struct nct6683_data *data = dev_get_drvdata(dev);
1041 mutex_lock(&data->update_lock);
1043 ret = superio_enter(data->sioreg);
1046 superio_select(data->sioreg, NCT6683_LD_ACPI);
1047 reg = superio_inb(data->sioreg, NCT6683_REG_CR_CASEOPEN);
1048 superio_exit(data->sioreg);
1050 mutex_unlock(&data->update_lock);
1055 mutex_unlock(&data->update_lock);
1063 struct nct6683_data *data = dev_get_drvdata(dev);
1071 mutex_lock(&data->update_lock);
1078 ret = superio_enter(data->sioreg);
1084 superio_select(data->sioreg, NCT6683_LD_ACPI);
1085 reg = superio_inb(data->sioreg, NCT6683_REG_CR_CASEOPEN);
1087 superio_outb(data->sioreg, NCT6683_REG_CR_CASEOPEN, reg);
1089 superio_outb(data->sioreg, NCT6683_REG_CR_CASEOPEN, reg);
1090 superio_exit(data->sioreg);
1092 data->valid = false; /* Force cache refresh */
1094 mutex_unlock(&data->update_lock);
1112 static inline void nct6683_init_device(struct nct6683_data *data)
1117 tmp = nct6683_read(data, NCT6683_HWM_CFG);
1119 nct6683_write(data, NCT6683_HWM_CFG, tmp | 0x80);
1127 nct6683_setup_fans(struct nct6683_data *data)
1133 reg = nct6683_read(data, NCT6683_REG_FANIN_CFG(i));
1135 data->have_fan |= 1 << i;
1136 data->fanin_cfg[i] = reg;
1139 reg = nct6683_read(data, NCT6683_REG_FANOUT_CFG(i));
1141 data->have_pwm |= 1 << i;
1142 data->fanout_cfg[i] = reg;
1162 static void nct6683_setup_sensors(struct nct6683_data *data)
1167 data->temp_num = 0;
1168 data->in_num = 0;
1170 reg = nct6683_read(data, NCT6683_REG_MON_CFG(i)) & 0x7f;
1178 data->temp_index[data->temp_num] = i;
1179 data->temp_src[data->temp_num] = reg;
1180 data->temp_num++;
1182 data->in_index[data->in_num] = i;
1183 data->in_src[data->in_num] = reg;
1184 data->in_num++;
1194 struct nct6683_data *data;
1204 data = devm_kzalloc(dev, sizeof(struct nct6683_data), GFP_KERNEL);
1205 if (!data)
1208 data->kind = sio_data->kind;
1209 data->sioreg = sio_data->sioreg;
1210 data->addr = res->start;
1211 mutex_init(&data->update_lock);
1212 platform_set_drvdata(pdev, data);
1214 data->customer_id = nct6683_read16(data, NCT6683_REG_CUSTOMER_ID);
1217 switch (data->customer_id) {
1235 nct6683_init_device(data);
1236 nct6683_setup_fans(data);
1237 nct6683_setup_sensors(data);
1241 if (data->have_pwm) {
1244 fls(data->have_pwm));
1247 data->groups[groups++] = group;
1250 if (data->in_num) {
1253 data->in_num);
1256 data->groups[groups++] = group;
1259 if (data->have_fan) {
1262 fls(data->have_fan));
1265 data->groups[groups++] = group;
1268 if (data->temp_num) {
1271 data->temp_num);
1274 data->groups[groups++] = group;
1276 data->groups[groups++] = &nct6683_group_other;
1278 if (data->customer_id == NCT6683_CUSTOMER_ID_INTEL)
1280 nct6683_read(data, NCT6683_REG_BUILD_MONTH),
1281 nct6683_read(data, NCT6683_REG_BUILD_DAY),
1282 nct6683_read(data, NCT6683_REG_BUILD_YEAR));
1285 nct6683_read(data, NCT6683_REG_BUILD_MONTH),
1286 nct6683_read(data, NCT6683_REG_BUILD_DAY),
1287 nct6683_read(data, NCT6683_REG_BUILD_YEAR));
1290 nct6683_chip_names[data->kind],
1291 nct6683_read(data, NCT6683_REG_VERSION_HI),
1292 nct6683_read(data, NCT6683_REG_VERSION_LO),
1296 nct6683_device_names[data->kind], data, data->groups);
1303 struct nct6683_data *data = nct6683_update_device(dev);
1305 mutex_lock(&data->update_lock);
1306 data->hwm_cfg = nct6683_read(data, NCT6683_HWM_CFG);
1307 mutex_unlock(&data->update_lock);
1314 struct nct6683_data *data = dev_get_drvdata(dev);
1316 mutex_lock(&data->update_lock);
1318 nct6683_write(data, NCT6683_HWM_CFG, data->hwm_cfg);
1321 data->valid = false;
1322 mutex_unlock(&data->update_lock);