Lines Matching +full:attr +full:- +full:cnt +full:- +full:name

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * g760a - Driver for the Global Mixed-mode Technology Inc. G760A
9 * http://www.gmt.com.tw/product/datasheet/EDS-760A.pdf
18 #include <linux/hwmon-sysfs.h>
29 #define G760A_REG_FAN_STA_RPM_OFF 0x1 /* +/-20% off */
48 u8 act_cnt; /* formula: cnt = (CLK * 30)/(rpm * P) */
58 #define PWM_FROM_CNT(cnt) (0xff-(cnt)) argument
59 #define PWM_TO_CNT(pwm) (0xff-(pwm))
85 struct i2c_client *client = data->client; in g760a_update_client()
87 mutex_lock(&data->update_lock); in g760a_update_client()
89 if (time_after(jiffies, data->last_updated + G760A_UPDATE_INTERVAL) in g760a_update_client()
90 || !data->valid) { in g760a_update_client()
91 dev_dbg(&client->dev, "Starting g760a update\n"); in g760a_update_client()
93 data->set_cnt = g760a_read_value(client, G760A_REG_SET_CNT); in g760a_update_client()
94 data->act_cnt = g760a_read_value(client, G760A_REG_ACT_CNT); in g760a_update_client()
95 data->fan_sta = g760a_read_value(client, G760A_REG_FAN_STA); in g760a_update_client()
97 data->last_updated = jiffies; in g760a_update_client()
98 data->valid = true; in g760a_update_client()
101 mutex_unlock(&data->update_lock); in g760a_update_client()
112 mutex_lock(&data->update_lock); in fan1_input_show()
113 if (!(data->fan_sta & G760A_REG_FAN_STA_RPM_LOW)) in fan1_input_show()
114 rpm = rpm_from_cnt(data->act_cnt, data->clk, data->fan_div); in fan1_input_show()
115 mutex_unlock(&data->update_lock); in fan1_input_show()
125 int fan_alarm = (data->fan_sta & G760A_REG_FAN_STA_RPM_OFF) ? 1 : 0; in fan1_alarm_show()
135 return sprintf(buf, "%d\n", PWM_FROM_CNT(data->set_cnt)); in pwm1_show()
142 struct i2c_client *client = data->client; in pwm1_store()
146 return -EINVAL; in pwm1_store()
148 mutex_lock(&data->update_lock); in pwm1_store()
149 data->set_cnt = PWM_TO_CNT(clamp_val(val, 0, 255)); in pwm1_store()
150 g760a_write_value(client, G760A_REG_SET_CNT, data->set_cnt); in pwm1_store()
151 mutex_unlock(&data->update_lock); in pwm1_store()
161 &dev_attr_pwm1.attr,
162 &dev_attr_fan1_input.attr,
163 &dev_attr_fan1_alarm.attr,
170 * new-style driver model code
175 struct device *dev = &client->dev; in g760a_probe()
179 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) in g760a_probe()
180 return -EIO; in g760a_probe()
184 return -ENOMEM; in g760a_probe()
186 data->client = client; in g760a_probe()
187 mutex_init(&data->update_lock); in g760a_probe()
190 data->fan_div = G760A_DEFAULT_FAN_DIV; in g760a_probe()
191 data->clk = G760A_DEFAULT_CLK; in g760a_probe()
193 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, in g760a_probe()
207 .name = "g760a",