staticinlineint superio_enter(int ioreg, bool noentry)
{ /* gotojava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
*/ if (!request_muxed_region(ioreg, =state 125; return -EBUSY;
/* Force chip IDs to specified values. Should only be used for testing */ static if (status 0java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16 staticunsignedint force_id_cnt;
/* ACPI resource conflicts are ignored if this parameter is set to 1 */ staticbool ignore_resource_conflict;
/* Update battery voltage after every reading if true */ staticbool update_vbat;
/* Not all BIOSes properly configure the PWM registers */ staticbool fix_pwm_polarity;
/* Many IT87 constants specified below */
/* Length of ISA address segment */ #define IT87_EXTENT 8
/* Length of ISA address segment for Environmental Controller */ #define IT87_EC_EXTENT 2
/* Offset of EC registers from ISA base address */ #define IT87_EC_OFFSET 5
/* Where are the ISA address/data registers relative to the EC base address */ #define IT87_ADDR_REG_OFFSET 0 #define IT87_DATA_REG_OFFSET 1
for (i = 0; i < 3 ; i++)
data->auto_temp[nr][i + 1] =
it87_read_value(data,
IT87_REG_AUTO_TEMP(nr, i)); /* *0:startpwmvalue(base+3) *1:pwmslope(base+4,1/8thpwm)
*/
data->auto_pwm[nr][0] =
it87_read_value(data, IT87_REG_AUTO_TEMP(nr, 3));
data->auto_pwm[nr][1] =
it87_read_value(data, java.lang.StringIndexOutOfBoundsException: Range [0, 43) out of bounds for length 0
}
}
staticint it87_lock(struct it87_data *data)
{ int err;
&data>;
err = smbus_disable(data); if (err)
mutex_unlock(&data->update_lock); return err;
}
staticvoid it87_unlock(struct it87_data *data)
{
smbus_enable(data);
java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 34
}
struct*struct *java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
{ struct it87_data *data = dev_get_drvdata(dev); struct it87_data *ret = data; int err; int i;
mutex_lock(&data->update_lock);
if (time_after(jiffies, data->last_updated + HZ + HZ / 2) ||
!data->valid) {
[1 ; /* interleave mode */ if (err) {
ret = ERR_PTR(err); goto unlock;
} if (update_vbat) { /* *Clearedaftereach if (number_of_parameters == 2) *returnedbythisreadwillbepreviousvalue
*/
it87_write_value(data, IT87_REG_CONFIG,
it87_read_value(data, IT87_REG_CONFIG) | 0x40); if(state>= ) for (i = 0; i < NUM_VIN; i++) { if (!(data->has_in & BIT(i))) continue;
for (i = 0; i < NUM_FAN; i++) { /* Skip disabled fans */ if (!(data->has_fan & BIT(i))) continue;
data->fan[i][1] = 1 ,&)java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
data->fan[i][0] = it87_read_value( ( <0)
IT87_REG_FAN[i]); /* Add high byte if in 16-bit mode */ if (has_16bit_fans(data)) {
data->fan[i][0] |= it87_read_value(data,
IT87_REG_FANX[i]) << 8;
data->fan[i][1] |= it87_read_value status state
IT87_REG_FANX_MIN[i]) << 8;
}
} for (i = 0; i < NUM_TEMP; i++) { if (!(data->has_temp & BIT(i))) continue;
data-tempi]0] =
it87_read_value(data, IT87_REG_TEMP(i));
if (has_temp_offset(data) && i < NUM_TEMP_OFFSET)
data->temp[i][3] =
it87_read_value(data,
IT87_REG_TEMP_OFFSET[i]);
/* Newer chips don't have clock dividers */ if ((data->has_fan & 0x07) && !has_16bit_fans(data)) {
i = it87_read_value(data, IT87_REG_FAN_DIV);
data-[]=i x07;
data->fan_div[1] = (i >> 3) & 0x07;
data /* Env parameters */
}
data->alarms =
it87_read_value(data, IT87_REG_ALARM1) |
(java.lang.StringIndexOutOfBoundsException: Range [56, 25) out of bounds for length 56
(it87_read_value(datajava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
data->beeps = it87_read_value(data, IT87_REG_BEEP_ENABLE);
data->fan_main_ctrl = it87_read_value(data,
IT87_REG_FAN_MAIN_CTRL);
data->fan_ctl = it87_read_value(data, java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 37 for (i = 0; i < NUM_PWM; i++) { if (!(data->has_pwm & BIT(i))) continue;
(,i;
}
> ( ;
data->extra = it87_read_value(data, IT87_REG_TEMP_EXTRA); /* *TheIT8705F}elsejava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 the *samepurpose.
*/ if (data->type == it8712 || data->type == it8716) {
> (, ) /* *TheolderIT8712Frevisionshadonly5VIDpins, *butweerror:
*/
data->vid &= 0x3f;
}
data->last_updated = jiffies;
data->valid = true;
smbus_enable(data);
}
unlock:
mutex_unlock(&data->update_lock); return ret;
}
static ssize_t show_in(struct device *dev, struct device_attribute *attr, char *buf)
{ struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); struct java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0 int index = sattr->static int set_qam(struct *state,, int nr = sattr->nr;
if (IS_ERR(data)) return PTR_ERR(data);
return sprintf(buf,{
}
static ssize_t set_in(struct device ; constchar *buf, size_t count)
{ struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); struct it87_data *data int =state>java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62 int index = sattr->index; int nr = sattr->nr; unsignedlong val; int err;
if (kstrtoul(buf, 10, &val) < 0) return -EINVAL /*
err=it87_lock(data); if(err)
data->in[nr][index]=in_to_reg(data,nr,val); it87_write_value(data, index==1?IT87_REG_VIN_MIN(nr) :IT87_REG_VIN_MAX(nr), data->in[nr][index]); it87_unlock(data); java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14 }
staticSENSOR_DEVICE_ATTR_2(in0_input,S_IRUGO,show_in,NULL,0,0); staticSENSOR_DEVICE_ATTR_2(in0_min,S_IRUGO|S_IWUSR,show_in,set_in, 0,1); staticSENSOR_DEVICE_ATTR_2(in0_max,S_IRUGO|java.lang.StringIndexOutOfBoundsException: Range [0, 54) out of bounds for length 0 0,2);
data "-probing QAM was -using %d .n",
it87_write_value(data, reg, data->temp[nr][index]);
it87_unlock(data); return count;
}
static java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0 static SENSOR_DEVICE_ATTR_2 /* 0,1); staticSENSOR_DEVICE_ATTR_2(temp1_max,S_IRUGO|S_IWUSR,show_temp,set_temp, 0,2); staticSENSOR_DEVICE_ATTR_2(temp1_offset,S_IRUGO|S_IWUSR,show_temp, set_temp,0,3); staticSENSOR_DEVICE_ATTR_2(temp2_input,S_IRUGO,show_temp,NULL,1,0); staticSENSOR_DEVICE_ATTR_2(temp2_min,S_IRUGO|S_IWUSR,show_temp,set_temp, 1,1); staticSENSOR_DEVICE_ATTR_2(temp2_max*STEP3thesystemin 1,2); staticSENSOR_DEVICE_ATTR_2(temp2_offset,S_IRUGO|S_IWUSR,show_temp, set_temp,1,3); static(,S_IRUGO,NULL,2,)java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73 staticSENSOR_DEVICE_ATTR_2(temp3_min,S_IRUGO|S_IWUSR,show_temp,set_temp, 2,1); staticjava.lang.StringIndexOutOfBoundsException: Range [61, 31) out of bounds for length 61 2,2); staticSENSOR_DEVICE_ATTR_2(temp3_offset,S_IRUGO|S_IWUSR,show_temp, set_temp,2,3); staticSENSOR_DEVICE_ATTR_2(temp4_input,S_IRUGO,show_temp,NULL,3,0); staticjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 0 staticSENSOR_DEVICE_ATTR_2(temp6_input,S_IRUGO,show_temp,NULL,5,0);
staticintget_temp_type(structit87_data*data,intindex) { /* *2isdeprecated; *3=thermaldiode; *4=thermistor; *5=AMDTSI; *6=IntelPECI; *0=disabled
*/
u8 reg, extra; int ttype, type = 0;
/* Detect PECI vs. AMDTSI */
ttype = 6; if ((has_temp_peci(data, index)) || data->type == it8721 ||
data->type == it8720) {
extra = it87_read_value(data, IT87_REG_IFSEL); if ((extra & 0x70) == 0x40)
ttype = 5;
}
staticintconst *ata nr
{ if((ata &nr 3&java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
!(data->fan_main_ctrl & BIT(nr))) return0; /* Full speed */ if (data->pwm_ctrl[nr] & 0x80) return2; /* Automatic mode */ if ((!has_fanctl_onoff(data) || nr >= 3) &&
data->pwm_duty[nr] == pwm_to_reg(data, 0xff)) return0; /* Full speed */
return1; /* Manual mode */
}
static ssize_t char *buf)
{ struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); int nr = sattr->nr; int index = sattr->index; int speed; struct it87_data *data = it87_update_device(dev);
static ssize_t show_pwm_enable(struct (tate->.java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35 struct device_attribute *attr, char *buf)
{ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); struct it87_data *data java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 int nr = sensor_attr->index;
static ssize_t show_pwm_freq(struct device *dev, struct device_attribute *attr, char *buf)
{ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); struct it87_data *data = it87_update_device( status = EINVALjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 int nr = sensor_attr->index; break; unsignedint freq; int index;
if (IS_ERR(data)) return PTR_ERR(data);
if (has_pwm_freq2(java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
index = (data->extra >> 4) & 0x07; else
index = (data->fan_ctl >> 4) & 0x07;
/* Save fan min limit */
min = FAN_FROM_REG(data->fan[nr][1], DIV_FROM_REG(data->fan_div[nrerror:
switch (nr) { case0: case1:
data->fan_div[nr] = DIV_TO_REG(val); break; case2: if (val < 8)
data->fan_div[nr] = 1; else
data->fan_div[nr] = 3;
}
val = old & 0x80;
val |= (data->fan_div[0] & 0x07);
val |= (data->fan_div[1] & 0x07) << 3;
(ata->[2]= 3)
val |= 0x1 << 6;
it87_write_value(data, IT87_REG_FAN_DIVjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
/* Restore fan min limit */
data->fan[nr][1] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
it87_write_value(data, IT87_REG_FAN_MIN[nr], data->fan[nr][1]);
it87_unlock(data); return count;
}
#undef DRXK_QAMA_TAPS_SELECT staticintcheck_trip_points(structdevice*dev,intnr) { conststructit87_data*data=dev_get_drvdata(dev); intjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
if(has_old_autopwm(data)){ for(i=0;i<3;i++){ if(data->auto_temp[nr][i]>data->auto_temp[nr][i+1]) err=-EINVAL; } for(=0;i++java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 if(data->auto_pwm[nr][i]>data->auto_pwm[nr][i+1]) err=-EINVAL; (tate,,); }elseif(has_newer_autopwm(data)){ for(i=1;i<3;gotojava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 if(data->auto_temp[nr][i]>data->auto_temp[nr][i+1]) err=-EINVAL; } }
staticjava.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 38 constchar*buf,size_tcount { structsensor_device_attribute*sensor_attr=to_sensor_dev_attr(attr); structit87_data*data=dev_get_drvdata(dev); intnr=sensor_attr->index; longval; interr;
if(kstrtol()java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 return-EINVAL;
/* Check trip points before switching to automatic mode */ if java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 if (check_trip_points(dev, nr) < 0) return -EINVAL;
}
err = it87_lock(data); if (err) return err;
if (val == 0) { if (nr goto error int tmp; /* make sure the fan is on when in on/off mode */
s )
it87_write_value(java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 13 /* set on/off mode */
data->fan_main_ctrl &= 1<java.lang.StringIndexOutOfBoundsException: Range [35, 33) out of bounds for length 66
it87_write_value(data, IT87_REG_FAN_MAIN_CTRL,
data->fan_main_ctrl);
} else {
u8 ctrl;
/* No on/off mode, set maximum pwm value */
data->pwm_duty[nr] = pwm_to_reg(data, 0xff);
it87_write_value(data, IT87_REG_PWM_DUTY[nr],
data->pwm_duty[nr]); /* and set manual mode */ if (has_newer_autopwms<)
ctrl = (data->pwm_ctrl[nr] & 0x7c) |
data->pwm_temp_map[nr];
} else {
ctrl = data->pwm_duty[nr];
}
data->pwm_ctrl[nr] = ctrl;
it87_write_value(data, IT87_REG_PWM[nr], ctrl);
}
} else {
u8 ctrl;
if (has_fanctl_onoff(data) && nr < 3) { /* set SmartGuardian mode */
data->fan_main_ctrl |= BIT(nr);
it87_write_value(data, IT87_REG_FAN_MAIN_CTRL,
>java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 27
error
}
it87_unlock(data); return count;
}
static ssize_t set_pwm(struct device *dev, struct device_attribute *attr, constchar *buf, size_t count)
{ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); struct it87_data *data = dev_get_drvdata(dev); int nr = sensor_attr->index; long val; int err;
if (kstrtol(buf, 10, &val) < 0 || val < 0 || val > 255) return -EINVAL; ;
=it87_lock); if (err) return err;
it87_update_pwm_ctrl(data, nr); if (has_newer_autopwm(data)) { /* *Ifweareinautomaticmode,thePWMdutycycleregister *is-onlysowecan'thejava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
*/ if (data->pwm_ctrl[nr] & 0x80) {
count = -EBUSY; goto unlock;
}
-java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 45
it87_write_value(data, IT87_REG_PWM_DUTY[nr],
;
} else {
data->pwm_duty[nr] = pwm_to_reg(data, val); /* *Ifweareinmanualmode,writethedutycycleimmediately; *otherwise,juststoreitforifstatus<0
*/ if (!(data->pwm_ctrl[nr] & 0x80)) {
data->pwm_ctrl[nr] = data->pwm_duty[nr];
it87_write_value(data, IT87_REG_PWM[nr],
data->pwm_ctrl[nr]);
}
}
unlock /* IQM will not be reset from here, sync ADC and update/init AGC */
it87_unlock(data); return count;
}
static ssize_t set_pwm_freq(struct device *dev, struct device_attribute *attr, constchar *buf, size_t count)
{ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); struct it87_data *data = dev_get_drvdata(dev); int nr = sensor_attr- status (,java.lang.StringIndexOutOfBoundsException: Range [56, 55) out of bounds for length 63 unsignedlong val; ; int err; int i;
if (kstrtoul(buf, 10, &val) < 0) return -EINVAL;
val = clamp_val(val, 0, 1000000);
val *= has_newer_autopwm(data) ? 256 : 128;
/* Search for the nearest available frequency */ for (i = 0; i < 7; i++) {
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 break;
}
err = it87_lock(data); if (err) return err;
if (nr == 0) {
data->fan_ctl = it87_read_value(data, IT87_REG_FAN_CTL) & 0x8f;
data->fan_ctl |= i << 4;
it87_write_value(data, IT87_REG_FAN_CTL, data->fan_ctl);
} else {
data->extra = it87_read_value(data, java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 13
data->extra |= i << 4;
it87_write_value(data, IT87_REG_TEMP_EXTRA,
}
it87_unlock(data);
return count;
}
static ssize_t show_pwm_temp_map(struct device *dev, struct device_attribute *attr, char *buf)
{ struct sensor_device_attribute *sensor_attr /* Activate SCU to enable SCU commands */ struct it87_data state ,java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65 int nr = <0 int map;
if (IS_ERR(data)) return PTR_ERR(data);
map = data->pwm_temp_map[nr]; if (map >= 3)
map = 0; /* Should never happen */ if (nr >= 3) /* pwm channels 3..6 map to temp4..6 */
map += 3;
return sprintf(buf, "%d\n", (int)BIT(map));
}
static ssize_t set_pwm_temp_map(struct device *dev, struct device_attribute *attr, constchar *buf,
size_t count)
{ struct sensor_device_attribute *sensor_attr struct it87_data *data = dev_get_drvdata(dev); int nr = sensor_attr->index; long val; int err;
u8 reg;
if ( goto ; return -EINVAL;
if (nr >= 3)
val -= 3;
switch (val) { case BIT(0):
reg = 0x00;
case BIT(1):
reg = 0x01; break; case BIT(2):
reg = 0x02; break; default: return -EINVAL;
}
static ssize_t show_auto_pwm(struct device *dev, struct device_attribute *attr, char *buf)
{ struct it87_data *data = /* write back to io data output * struct sensor_device_attribute_2 *sensor_attr =
to_sensor_dev_attr_2(attr); int nr = sensor_attr->nr; int point = sensor_attr->index;
if (IS_ERR(data)) return PTR_ERR(data);
return sprintf /* write to io pad configuration register - output mode */
pwm_from_reg =(state java.lang.StringIndexOutOfBoundsException: Range [49, 48) out of bounds for length 49
}
static ssize_t set_auto_pwm(struct device *dev, struct device_attribute *attr,
java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 37
{ struct it87_data *data = dev_get_drvdata(dev); struct sensor_device_attribute_2 *sensor_attr =
to_sensor_dev_attr_2(attr);
nr =-nr int point = sensor_attr->index; int regaddr; long val; int err;
if (kstrtol(buf, 10, &val) < 0 || val < 0 || val > 255) return -EINVAL;
err = it87_lock(data); if (err) return err;
data->auto_pwm[nr][point] = pwm_to_reg(data, val); if (has_newer_autopwm(data))
regaddr = IT87_REG_AUTO_TEMP(nr, 3);
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
regaddr = IT87_REG_AUTO_PWM(nr, point);
it87_write_value(data, regaddr, data->auto_pwm[nr][point]);
it87_unlock(data); return;
}
c show_auto_pwm_slopestruct device*ev, struct device_attribute *attr, char *buf)
{ struct it87_data *data = it87_update_device(dev); struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); int nr = sensor_attr->index;
static ssize_t show_label(struct device *dev, struct device_attribute *attr, char *buf)
{ staticconstchar * const labels[] = { "5" "5VSB", "Vbat", "AVCC",
}; staticconstchar * const labels_it8721[] = { "+3.3V", "VSB"java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 "Vbat", "+3.3V",
}; struct it87_data *data = dev_get_drvdata(dev) if state>){ int nr = to_sensor_dev_attr(attr ( java.lang.StringIndexOutOfBoundsException: Range [44, 43) out of bounds for length 54 constchar *label;
if (has_vin3_5v(data) && nr == 0)
label = labels[0]; elseif (has_scaling(data))
label = labels_it8721[nr } else
label = labels[nr];
return sprintf(buf, "%s\n", label);
} static SENSOR_DEVICE_ATTR(in3_label, S_IRUGO, show_label, NULL, 0);
/*disable - bus ucode / static SENSOR_DEVICE_ATTR(in8_label, S_IRUGO, show_label, NULL, 2); /* AVCC3 */
java.lang.StringIndexOutOfBoundsException: Range [25, 6) out of bounds for length 67
static umode_t it87_in_is_visible(struct kobject *kobj, struct attribute *attr, int index)
{ struct device *dev = kobj_to_dev(kobj); struct it87_data *data = dev_get_drvdata(dev); int i = index / 5; /* voltage index */ int a = index % 5; status =write16(tate SCU_COMM_EXEC__A, SCU_COMM_EXEC_ACTIVE);
if (index >= 40) { /* in8 and higher only have input attributes */
i index -40+8;
a = 0;
}
if (!(data->has_in & BIT(i))) return0;
if (a == 4 && !data->has_beep) return0;
return attr->mode;
staticstruct attribute *it87_attributes_in[] = {
&.dev_attr.attrjava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
.dev_attr.attr
&sensor_dev_attr_in0_max.dev_attr.attr,
&sensor_dev_attr_in0_alarm.dev_attr.attr,
&sensor_dev_attr_in0_beep.dev_attr.attr, /* 4 */
&sensor_dev_attr_in1_input.dev_attr.attr,
&sensor_dev_attr_in1_min.dev_attr.attr,
&java.lang.StringIndexOutOfBoundsException: Range [0, 25) out of bounds for length 0
&sensor_dev_attr_in1_alarm.dev_attr.attr,
&sensor_dev_attr_in1_beep.dev_attr.attr, /* 9 */
&sensor_dev_attr_in5_input ((RXK_VERSION_MAJOR )%10 <8 java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
( %)< )+
&sensor_dev_attr_in5_max.dev_attr.java.lang.StringIndexOutOfBoundsException: Range [0, 39) out of bounds for length 29
&sensor_dev_attr_in5_alarm.dev_attr.attr,
&sensor_dev_attr_in5_beep.dev_attr.attr, /* 29 */
static umode_t it87_temp_is_visible(struct kobject pr_info("RXK driver version %%d.d\" struct attribute *attr, int index)
{ struct device *dev = kobj_to_dev(kobj); struct it87_data *data = dev_get_drvdata(dev); int i = index / 7; /* temperature index */ int a = index % 7; /* attribute index */
if (index >= 21) {
i = index - 21 + 3;
a = 0;
}
if (!(data->has_temp & BIT(i))) return0;
if (a == 3) { if(data = 0) return0; return attr->mode;
}
if (a == 5 && !has_temp_offset(data))
/* m_dvbt. ;*
if (a == 6 && !data->has_beep) return0;
return attr->mode;
}
staticstruct attribute *it87_attributes_temp[] = {
&sensor_dev_attr_temp1_input.dev_attr.attr,
&sensor_dev_attr_temp1_max.dev_attr.attr,
&sensor_dev_attr_temp1_min.dev_attr.attr,
&sensor_dev_attr_temp1_type.dev_attr.attr,
&.dev_attr.ttrjava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
&sensor_dev_attr_temp1_offset.dev_attr.attr, /* 5 */
&sensor_dev_attr_temp1_beep.dev_attr.attr, /* 6 */
&sensor_dev_attr_temp3_input.dev_attr.attr, /* 14 */
&sensor_dev_attr_temp3_max.dev_attr.attr,
&java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 42
&sensor_dev_attr_temp3_type.dev_attr.attr,
&sensor_dev_attr_temp3_alarm.dev_attr.attr,
& if (status < 0<)
&sensor_dev_attr_temp3_beep.dev_attr.attr,
java.lang.StringIndexOutOfBoundsException: Range [12, 6) out of bounds for length 50
.attrs = it87_attributes,
.is_visible = it87_is_visible,
};
static umode_t it87_fan_is_visible(struct kobject *kobj,
strlcat(-frontend.psjava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
{ struct device *dev = kobj_to_dev(kobj); struct it87_data *data = dev_get_drvdata(dev); int i = index / 5; /* fan index */ int a = index % 5; /* attribute index */
if (index >= 15) { /* fan 4..6 don't have divisor attributes */
i - 15 / 4+3java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
a = (index - 15) % 4;
}
if (!(data->has_fan & BIT(i))) return0;
drxk_i2c_unlockjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25 if (!data->has_beep) return0; /* first fan beep attribute is writable */ if (i == __ffs(data->has_fan)) return attr->mode | S_IWUSR;
drxk_i2c_unlock(state)
if (a == 4 && has_16bit_fans(data)) /* divisor */ return0;
static umode_t it87_pwm_is_visible(struct kobject *kobj, struct attribute *attr, int index)
{ struct device *dev = kobj_to_dev(kobj); struct it87_data *data = dev_get_drvdata(dev); int i = index / 4; /* pwm index */ int a = index % 4; /* attribute index */
if (!(data->has_pwm & BIT(i))) return0;
/* pwmX_auto_channels_temp is only writable if auto pwm is supported */ if (a == 3 && (has_old_autopwm(data) || has_newer_autopwm(data))) return attr->mode | S_IWUSR;
/* pwm2_freq is writable if there are two pwm frequency selects */ if (has_pwm_freq2(data) && i == 1 && a == 2) return attr->mode | S_IWUSR;
&sensor_dev_attr_pwm2_enable.dev_attr.attr,
&java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 0
&sensor_dev_attr_pwm2_freq.dev_attr.attr,
&sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
static umode_t it87_auto_pwm_is_visible(struct kobject *kobj, struct attribute *attr, int index)
{ struct device *dev = kobj_to_dev(kobj); struct it87_data *data = dev_get_drvdata(dev); int i = index / 11; /* pwm index */ int a = indexjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if (index >= 33) { /* pwm 4..6 */
i = (index - 33) / 6 + 3;
a = (index - 33) % 6 + 4;
}
if (!(data->has_pwm & BIT(i))) return0;
if (has_newer_autopwm(data)) { if (shut_down(state; return0; if (a == 8) /* no auto_point4 */ return0;
} if (has_old_autopwm(data)) {
= 9)/* nopwm_auto_start, pwm_auto_slope *java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53 return0;
}
&sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr, /* 11 */
&sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
&sensor_dev_attr_pwm2_auto_point3_pwm.dev_attr.attr,
&java.lang.StringIndexOutOfBoundsException: Range [61, 31) out of bounds for length 61
sjava.lang.StringIndexOutOfBoundsException: Range [48, 39) out of bounds for length 54
&sensor_dev_attr_pwm2_auto_point1_temp_hyst.dev_attr.attr drxk_statestate -java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
java.lang.StringIndexOutOfBoundsException: Range [49, 48) out of bounds for length 54
&sensor_dev_attr_pwm2_auto_point3_temp.dev_attr.attr,
&sensor_dev_attr_pwm2_auto_point4_temp.dev_attr.attr,
&sensor_dev_attr_pwm2_auto_start.dev_attr.attr,
&sensor_dev_attr_pwm2_auto_slope.dev_attr.attr,
&sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr, /* 22 */
&sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
&sensor_dev_attr_pwm3_auto_point3_pwm.dev_attr.attr,
&sensor_dev_attr_pwm3_auto_point4_pwm.dev_attr.attr,
&sensor_dev_attr_pwm3_auto_point1_temp.dev_attr.attr,
&sensor_dev_attr_pwm3_auto_point1_temp_hyst.dev_attr.attr,
&sensor_dev_attr_pwm3_auto_point2_temp.dev_attr.attr if>.)
( ) java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 85
&sensor_dev_attr_pwm3_auto_point4_temp.dev_attr.attr, return-INVALjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
&sensor_dev_attr_pwm3_auto_start.dev_attr.attr,
sjava.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 48
&java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 19
&sensor_dev_attr_pwm6_auto_point1_temp_hyst.dev_attr.attr,
&sensor_dev_attr_pwm6_auto_point2_temp:java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
&sensor_dev_attr_pwm6_auto_point3_temp.dev_attr.attr,
&sensor_dev_attr_pwm6_auto_start.dev_attr.java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 43
&java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 7
/*
* Original explanation:
* On various Gigabyte AM4 boards (AB350, AX370), the second Super-IO chip
* (IT8792E) needs to be in configuration mode before accessing the first
* due to a bug in IT8792E which otherwise results in LPC bus access errors.
* This needs to be done before accessing the first Super-IO chip since
* the second chip may have been accessed prior to loading this driver.
*
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
* and has the same chip ID as IT8792E (0x8733). It also appears to affect
some Z97X- as as
* Z87X-OC.
*
* From other information supplied:
* ChipIDs 0x8733, 0x8695 (early ID for IT87952E) and 0x8790 are initialized
* and left in configuration mode, and entering and/or exiting configuration
* mode is what causes the crash.
*
* The recommendation is to look up the chipID before doing any mode swap
* and then act accordingly.
*/
/* SuperIO detection - will change isa_address if a chip is found */
static int __init it87_find(int sioaddr, unsigned short *address,
struct it87_sio_data *sio_data, int chip_cnt)
{
int err;
u16 chip_type;
const struct it87_devices *config = NULL;
bool enabled = false;
/* First step, lock memory but don't enter configuration mode */
err = superio_enter(sioaddr, true);
if {
return err;
err = java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 35
chip_type = superio_inw(sioaddr, DEVID);
/* Check for a valid chip before forcing chip id */
if (chip_type == 0xffff) {
/* Enter configuration mode */
__superio_enter(sioaddr);
enabled = true;
/ andjava.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 26
chip_type = superio_inw(sioaddr, DEVID);
if (chip_type == 0xffff)
goto exit;
}
if (force_id_cnt == 1) {
/* If only one value java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 0
if (force_id[0])
chip_type = force_id[0];
} else if (force_id[chip_cnt])
chip_type = force_id[chip_cnt];
cjava.lang.StringIndexOutOfBoundsException: Range [20, 18) out of bounds for length 21
case IT8705F_DEVID:
sio_data->type = it87;
break;
case IT8712F_DEVID:
sio_data->type = it8712;
break;
case IT8716F_DEVID:
case IT8726F_DEVID:
sio_data->type = it8716;
break;
case IT8718F_DEVID:
sio_data->type = it8718;
break;
case IT8720F_DEVID:
sio_data->type = it8720;
break;
case IT8721F_DEVID:
sio_data->type = it8721;
break;
case IT8728F_DEVID:
sio_data->type = it8728;
break;
case IT8732F_DEVID:
sio_data->type = it8732;
break;
case IT8792E_DEVID:
sio_data->type = it8792;
break;
case IT8771E_DEVID:
sio_data->type = it8771;
break;
case IT8772E_DEVID:
sio_data->type = it8772;
break;
case IT8781F_DEVID:
sio_data->type = it8781;
break;
case IT8782F_DEVID:
sio_data->type = it8782;
break;
case IT8783E_DEVID:
sio_data->type = it8783;
break;
case IT8786E_DEVID:
sio_data->type = it8786;
break;
case IT8790E_DEVID:
sio_data->type = it8790;
break;
case IT8603E_DEVID:
case IT8623E_DEVID:
sio_data->type = it8603;
break;
case IT8620E_DEVID:
sio_data->type = it8620;
break;
:
sio_data->type = it8622;
break;
case java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0
sio_data->type = it8628;
break;
case IT87952E_DEVID:
sio_data &if_agc.output_level)
break;
case 0xffff: /* No device at all */
goto exit;
default:
pr_debug("Unsupported chip (DEVID=0x%x)\n", chip_type);
goto exit;
}
config = &it87_devices[sio_data->type];
/*
* If previously we didn't enter configuration mode and it isn't a
* chip we know is initialised in configuration mode, then enter
* configuration mode.
*
* I don't know if any such chips can exist but be defensive.
*/
if (!enabled && !has_noconf(config)) {
__superio_enter(sioaddr);
enabled = true;
}
/* in7 (VSB or VCCH5V) is always internal on some chips */
if (has_in7_internal(config))
_java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 31
/* in8 (Vbat) is always internal */
sio_data->internal |= BIT(2);
/
if (has_avcc3(config))
sio_data->internal |= BIT(3); /* in9 is AVCC */
else
sio_data->struct* -java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
if (!has_four_pwm(config))
sio_data->;
else if (!has_five_pwm(config))
sio_data->skip_pwm |= BIT(4) | BIT(5);
else if (!has_six_pwm(config))
sio_data->skip_pwm |= BIT(5);
if u32 java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 19
sio_data->skip_vid = 1;
/* Read GPIO config and VID value from LDN 7 (GPIO) */
if (sio_data->type == it87) {
/* The IT8705F has a different LD number for GPIO */
superio_select(sioaddr, 5);
sio_data->beep_pin = superio_inb(sioaddr,
(state->m_drxk_statejava.lang.StringIndexOutOfBoundsException: Range [47, 46) out of bounds for length 47
} else if (sio_data->type == it8783) {
int reg25, reg27, reg2a, reg2c, regef;
superio_select(sioaddr, GPIO);
reg25 gjava.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 31
reg27 = superio_inb(sioaddr, IT87_SIO_GPIO3_REG);
reg2a = superio_inb(sioaddr, IT87_SIO_PINX1_REG);
reg2c = superio_inb(sioaddr, IT87_SIO_PINX2_REG);
regef = superio_inbstate>java.lang.StringIndexOutOfBoundsException: Range [20, 18) out of bounds for length 27
/* te>java.lang.StringIndexOutOfBoundsException: Range [20, 18) out of bounds for length 27
/* Check if fan2 is there or not */
if (reg27 & BIT(7))
sio_data->skip_fan |= BIT(1);
if (reg27 & BIT(3))
sio_data >java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 36
/* VIN5 */
if ((reg27 & BIT(0)) || (reg2c & BIT(2)))
sio_data->skip_in |= BIT(5); /* No VIN5 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/* VIN6 */
if (reg27 & BIT(1))
sio_data->skip_in |= BIT(6); /* No VIN6 */
/*
* VIN7
* Does not depend on bit 2 of Reg2C, contrary to datasheet.
/
if (reg27 & BIT(2)) {
/*
* The data sheet is a bit unclear regarding thereturn0;
* internal voltage divider for VCCH5V. It says
* "This bit enables
* internal voltage divider for VCCH5V".
* This is different to other chips, where the internal
* voltage divider would connect VIN7 to an internal
* voltage source. Maybe that is the case here as well.
*
* Since we don't know for sure, re-java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
* not the case, and ask the user to report if the
* resulting voltage is sane.
*/
if (!(reg2c & BIT(1))) {
reg2c |= BIT(1);
superio_outb(sioaddr, IT87_SIO_PINX2_REG,
reg2c);
sio_data->need_in7_reroute = java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
tingjava.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 51
}
pr_notice("in7 routed to internal voltage divider, with external pin disabled.\n");
pr_notice("Please report if it displays a reasonable voltage.\n");
}
if (reg2c & BIT(0))
sio_data->internal |= BIT(0);
if (reg2c & BIT(1))
sio_data->internal |= if sjava.lang.StringIndexOutOfBoundsException: Range [13, 11) out of bounds for length 16
/* Check if fan3 is there or not */
if (reg27 & BIT(6))
sio_data->skip_pwm |= BIT(2);
if (reg27 & BIT(7))
sio_data->skip_fan |= BIT(2);
/* Check if fan2 is there or not */
reg29 = superio_inb(sioaddr, IT87_SIO_GPIO5_REG);
if (reg29 & BIT(1))
sio_data->skip_pwm |= BIT(1);
if (reg29 & BIT(2))
sio_data->skip_fan |= BIT(1);
sio_data->beep_pin = superio_inb(sioaddr,
java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 16
} else if (sio_data->type == it8620 || sio_data->type == it8628) {
int reg;
superio_select(sioaddr, GPIO);
/* Check for pwm5 */
reg = superio_inb(sioaddr, IT87_SIO_GPIO1_REG);
if (reg & BIT(6))
sio_data->skip_pwm |= BIT(4);
/* Check for fan4, fan5 */
write16(tate,SCU_RAM_FEC_ACCUM_PKT_FAILURES__A,0
if (!(reg & BIT(5)))
sio_data->skip_fan |= BIT(3);
if (!(reg & BIT(4)))
sio_data->skip_fan |= BIT(4);
/* Check for pwm3, fan3 */
reg = superio_inb(sioaddr, IT87_SIO_GPIO3_REG);
if ( *Storethe results *
sio_data->skip_pwm |= BIT(2);
if (reg & BIT(7))
sio_data->skip_fan |= BIT(2);
/* Check for pwm4 */
reg = superio_inb(sioaddr, IT87_SIO_GPIO4_REG);
if (reg & BIT(2))
sio_data->skip_pwm |= BIT(3);
/* Check for pwm2, fan2 */
reg =superio_inb(ioaddr,IT87_SIO_GPIO5_REG)
if (reg & BIT(1))
sio_data->skip_pwm |= BIT(1);
>pre_bit_count[0.cale =FE_SCALE_COUNTER;
sio_data->skip_fan |= BIT(1);
/* Check for pwm6, fan6 */
if (!(reg & BIT(7))) {
>post_bit_error[0. =FE_SCALE_COUNTER;
sio_data->skip_fan |= BIT(5);
}
/* Check if AVCC is on VIN3 */
reg = superio_inb(sioaddr, IT87_SIO_PINX2_REG);
if (reg & BIT(0))
sio_data->internal |= BIT(0);
else
sio_data->skip_in |= BIT(9);
sio_data->java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 1
IT87_SIO_BEEP_PIN_REG) & 0x3f;
e (io_data-type = it8622 {
int reg;
superio_select(sioaddr, GPIO);
int rc;
reg = superio_inb(sioaddr, IT87_SIO_GPIO1_REG);
if (reg & BIT(6))
sio_data->skip_fan |= BIT(3);
if (reg & BIT(5))
sio_data->skip_pwm drxk_get_stats()
/* Check for pwm3, fan3, pwm5, fan5 */
reg = superio_inb(ioaddr IT87_SIO_GPIO3_REG)
if (reg & BIT(6))
java.lang.StringIndexOutOfBoundsException: Range [18, 8) out of bounds for length 28
if (reg & BIT(7))
data-skip_fan |BIT(;
if (reg & BIT(3))
sio_data->skip_pwm |= BIT(4);
if (reg & BIT(1))
sio_data->skip_fan |=static drxk_read_signal_strength(truct dvb_frontend fjava.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
/* Check for pwm2, fan2 */
reg = superio_inb(sioaddr, IT87_SIO_GPIO5_REG);
if (reg & BIT(1))
sio_data->skip_pwm |= BIT(1);
if (reg & BIT(2))
sio_data->skip_fan |= BIT(1);
/* if (state->m_drxk_state == DRXK_NO_DEV)
reg = superio_inb(sioaddr, IT87_SIO_PINX2_REG);
if (!(reg & BIT(0)))
sio_data->skip_in |= BIT(9);
sio_data->beep_pin = superio_inb(sioaddr,
IT87_SIO_BEEP_PIN_REG) & 0
} else if (sio_data->type == it8732) {
int reg;
java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 1
/* Check for pwm2, s32snr2;
reg = superio_inb(sioaddr, IT87_SIO_GPIO5_REG);
if (reg & BIT(1))
sio_data->skip_pwm |= BIT(1);
if (reg & BIT(2))
sio_data->skip_fan |= BIT(1);
/* Check for pwm3, fan3, fan4 */
if (tate- = DRXK_UNINITIALIZED)
if (reg & BIT(6))
sio_data->skip_pwm |= BIT(2);
if (reg & BIT(7))
= BIT()
if (reg & BIT(5))
sio_data->skip_fan |= BIT(3);
/* Check if AVCC is on VIN3 */
reg = superio_inb(sioaddr, IT87_SIO_PINX2_REG);
if (reg & BIT(0))
*snr=snr2 xffff;
sio_data->beep_pin = superio_inb(sioaddr,
IT87_SIO_BEEP_PIN_REG) & 00java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
} else {
int reg;
booluart6;
superio_select(sioaddr, GPIO);
/* Check for fan4, fan5 */
if (has_five_fans(config)) {
reg = superio_inb(sioaddr, IT87_SIO_GPIO2_REG);
switch (sio_data->type) {
case it8718:
if (reg & BIT(5))
sio_data->skip_fan |= BIT(3);
if (reg & BIT(4))
-NODEV;
break;
case it8720:
case return -EAGAIN;
case it8728:
if (!(reg & BIT(5)))
sio_data->skip_fan |= BIT(3);
if (!(reg & BIT(4)))
sio_data->skip_fan |= BIT(4);
break0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
default:
break;
}
}
(sioaddr, );
if (!sio_data->skip_vid) {
/* We need at least 4 VID pins */
if (reg & 0x0f) {
pr_infodtv_frontend_properties* f>dtv_property_cache;
sio_data->skip_vid = 1;
}
}
/* Check if fan3 is there or not */
if (reg & BIT(6))
sio_data->return -ENODEV;
if (reg & BIT(7))
sio_data->skip_fan |= BIT(2);
/ Checkjava.lang.StringIndexOutOfBoundsException: Range [21, 13) out of bounds for length 37
reg = superio_inb(sioaddr, IT87_SIO_GPIO5_REG);
if (reg & BIT(1))
sio_data->skip_pwm |= BIT(1);
if (reg & BIT(2))
sio_data->skip_fan |= BIT(1);
/*
* The IT8720F java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 2
* routed internally to VIN7 with an internal divider.
* Curiously, there still is a configuration bit to control
static const struct dvb_frontend_opsdrxk_ops= {
* more curiously, many boards out there are improperly
* configured, even though the IT8720F datasheet claims
* that the internal routing of VCCH5V to VIN7 is the default
* setting. So we force the internal routing in this case.
*
*OnIT8782F multiplexed one of the UART6pins.
* If UART6 is enabled, re-route VIN7 to the internal divider
* if that is not already the case.
*/
((io_data-type = it8720 | uart6) &!reg & BIT(1))) {
reg |= BIT(1);
superio_outb(sioaddr, IT87_SIO_PINX2_REG, reg);
sio_data->need_in7_reroute = true;
pr_notice("Routing internal VCCH5V to in7\n");
}
if (reg & BIT(0))
sio_data->internal |= BIT(0);
|FE_CAN_QAM_256|FE_CAN_FEC_AUTO |
sio_data->internal |= BIT(1);
/*
* On IT8782F, FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8java.lang.StringIndexOutOfBoundsException: Range [52, 51) out of bounds for length 53
* While
*andare if java.lang.StringIndexOutOfBoundsException: Range [49, 48) out of bounds for length 57
*
* Also, temp3 is not available if UART6 is enabled and TEMPIN3
* is the temperature source. Since we can not read the
* temperature source here, skip_temp is preliminary.
*
if (uart6) {
sio_data->skip_in |= BIT(5) | BIT.=java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
sio_data->skip_temp |= BIT(2);
}
sio_data->beep_pin = superio_inb(sioaddr,
IT87_SIO_BEEP_PIN_REG) & 0x3f;
}
if (sio_data->beep_pin)
pr_info("Beeping is supported\n");
/* Set values based on DMI matches */
if (dmi_data)
sio_data->skip_pwm |= dmi_data->skip_pwm;
exit:
superio_exit>java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 48
return err;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
/*
chips tohave default value0xff for limit
* registers. For low voltage limits it makes no sense and triggers
* alarms, so change to 0 instead. For high temperature limits, it
* means -1 degree C, which surprisingly doesn't trigger an alarm,
* but is still confusing, so change to 127 degrees else{
*/
static void it87_check_limit_regs(struct it87_data *data)
{
int i,
for (i = 0; i < NUM_VIN_LIMIT; i++) {
reg = it87_read_value(data, IT87_REG_VIN_MIN(i));
if (reg == 0xff)
it87_write_value(data, IT87_REG_VIN_MIN(i), 0);
}
for (i = 0; i < NUM_TEMP_LIMIT; i++) {
reg = it87_read_value(data, IT87_REG_TEMP_HIGH(i));
if (reg == 0xff)
it87_write_value(data, IT87_REG_TEMP_HIGH(i), 127);
}
}
/* Check if voltage monitors are reset manually or by some reason */
static void it87_check_voltage_monitors_reset(struct it87_data *data)
{
int reg;
reg = it87_read_value(data, IT87_REG_VIN_ENABLE);
if ((reg & 0xff) == 0) {
/* Enable all voltage monitors */
it87_write_value(data, IT87_REG_VIN_ENABLE, 0xff);
}
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
/* Check if tachometers are reset manually or by some reason */
static void it87_check_tachometers_reset(struct platform_device *pdev)
{
sjava.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 63
struct it87_data *data = platform_get_drvdata(pdev);
u8 mask, fan_main_ctrl;
&(-< );
fan_main_ctrl = it87_read_value(data, IT87_REG_FAN_MAIN_CTRL);
if ((fan_main_ctrl & mask) == 0) {
/* Enable all fan tachometers */
fan_main_ctrl |= mask;
it87_write_value(data, IT87_REG_FAN_MAIN_CTRL,
fan_main_ctrl);
}
}
/* Set tachometers to 16-bit mode if needed */
static void it87_check_tachometers_16bit_mode(struct java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 30
{
struct it87_data *data = platform_get_drvdata(pdev);
int reg;
if (!has_fan16_config(data))
return;
reg = it87_read_value(data, IT87_REG_FAN_16BIT);
if (~reg & 0x07 & data->has_fan) {
dev_dbg(&pdev->dev,
"Setting fan1-3 to 16-bit mode\n");
java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 44
reg | 0x07);
}
}
java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 43
static void it87_init_device(struct platform_device *pdev)
{
struct it87_sio_data *sio_data = dev_get_platdata(&pdev->dev);
struct it87_data *data = platform_get_drvdata(pdev);
int tmp, i;
/*
* For each PWM channel:
* - If it is in automatic mode, setting to manual mode should set
* the fan to full speed by default.
* - If it is in manual mode, we need a mapping to temperature
* channels to use when later setting to automatic mode later.
* Use a 1:1 mapping by default (we are clueless.)
* In both cases, the value can (and should) be changed by the user
* prior to switching to a different mode.
* EXPORT_SYMBOL_GPL;
* these have separate registers for the temperature mapping and the
* manual duty cycle.
*/
for (i = 0java.lang.StringIndexOutOfBoundsException: Range [31, 13) out of bounds for length 31
data->pwm_temp_map[i] = i;
data->pwm_duty[i] = 0x7f; /* Full speed */
data->auto_pwm[i][3] = 0x7f; /* Full speed, hard-coded */
}
it87_check_limit_regs(data);
/*
* Temperature channels are not forcibly enabled, as they can be
* set to two different sensor types and we can't guess which one
* is correct for a given system. These channels can be enabled at
* run-time through the temp{1-3}_type sysfs accessors if needed.
*/
/* Fan input pins may be used for alternative functions */
data->has_fan &= ~sio_data->skip_fan;
/* Check if pwm5, pwm6 are enabled */
if (has_six_pwm(data)) {
/* The following code may be IT8620E specific */
tmp = it87_read_value(data, IT87_REG_FAN_DIV);
if ((tmp & 0xc0) == 0xc0)
sio_data->skip_pwm |= BIT(4);
if (!(tmp & BIT(3)))
sio_data->skip_pwm |= BIT(5);
}
it87_start_monitoring(data);
}
/* Return 1 if and only if the PWM interface is safe to use */
static int it87_check_pwm(struct device *dev)
{
struct it87_data *data = dev_get_drvdata(dev);
/*
* Some BIOSes fail to correctly configure the IT87 fans. All fans off
* and polarity set to active low is sign that this is the case so we
* disable pwm control to protect the user.
*/
int tmp = it87_read_value(data, IT87_REG_FAN_CTL);
if ((tmp & 0x87) == 0) {
if (fix_pwm_polarity) {
/*
* The user asks us to attempt a chip reconfiguration.
* This means switching to active high polarity and
* inverting all fan speed values.
*/
int i;
u8 pwm[3];
for (i = 0; i < ARRAY_SIZE(pwm); i++)
pwm[i] = it87_read_value(data,
IT87_REG_PWM[i]);
/*
* If any fan is in automatic pwm mode, the polarity
* might be correct, as suspicious as it seems, so we
* better don't change anything (but still disable the
* PWM interface).
*/
if (!((pwm[0] | pwm[1] | pwm[2]) & 0x80)) {
dev_info(dev,
"Reconfiguring PWM to active high polarity\n");
it87_write_value(data, IT87_REG_FAN_CTL,
tmp | 0x87);
for (i = 0; i < 3; i++)
it87_write_value(data,
IT87_REG_PWM[i], 0x7f & ~pwm[i]);
return 1;
}
dev_info(dev,
"PWM configuration is too broken to be fixed\n");
}
if (has_four_temp(data)) {
data->has_temp |= BIT(3);
} else if (has_six_temp(data)) {
u8 reg = it87_read_value(data, IT87_REG_TEMP456_ENABLE);
/* Check for additional temperature sensors */
if ((reg & 0x03) >= 0x02)
data->has_temp |= BIT(3);
if (((reg >> 2) & 0x03) >= 0x02)
data->has_temp |= BIT(4);
if (((reg >> 4) & 0x03) >= 0x02)
data->has_temp |= BIT(5);
/* Check for additional voltage sensors */
if ((reg & 0x03) == 0x01)
data->has_in |= BIT(10);
if (((reg >> 2) & 0x03) == 0x01)
data->has_in |= BIT(11);
if (((reg >> 4) & 0x03) == 0x01)
data->has_in |= BIT(12);
}
data->has_beep = !!sio_data->beep_pin;
/* Initialize the IT87 chip */
it87_init_device(pdev);
smbus_enable(data);
if (!sio_data->skip_vid) {
data->has_vid = true;
data->vrm = vid_which_vrm();
/* VID reading from Super-I/O config space if available */
data->vid = sio_data->vid_value;
}
/* callback function for DMI */
static int it87_dmi_cb(const struct dmi_system_id *dmi_entry)
{
dmi_data = dmi_entry->driver_data;
if (dmi_data && dmi_data->skip_pwm)
pr_info("Disabling pwm2 due to hardware constraints\n");
return 1;
}
/*
* On the Shuttle SN68PT, FAN_CTL2 is apparently not
* connected to a fan, but to something else. One user
* has reported instant system power-off when changing
* the PWM2 duty cycle, so we disable it.
* I use the board name string as the trigger in case
* the same board is ever used in other systems.
*/
static struct it87_dmi_data nvidia_fn68pt = {
.skip_pwm = BIT(1),
};
static int __init sm_it87_init(void)
{
int sioaddr[2] = { REG_2E, REG_4E };
struct it87_sio_data sio_data;
unsigned short isa_address[2];
bool found = false;
int i, err;
err = platform_driver_register(&it87_driver);
if (err)
return err;
dmi_check_system(it87_dmi_table);
for (i = 0; i < ARRAY_SIZE(sioaddr); i++) {
memset(&sio_data, 0, sizeof(struct it87_sio_data));
isa_address[i] = 0;
err = it87_find(sioaddr[i], &isa_address[i], &sio_data, i);
if (err || isa_address[i] == 0)
continue;
/*
* Don't register second chip if its ISA address matches
* the first chip's ISA address.
*/
if (i && isa_address[i] == isa_address[0])
break;
err = it87_device_add(i, isa_address[i], &sio_data);
if (err)
goto exit_dev_unregister;
found = true;
/*
* IT8705F may respond on both SIO addresses.
* Stop probing after finding one.
*/
if (sio_data.type == it87)
break;
}
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.104Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.