max31760_fan.c 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
  4. */
  5. #include <linux/delay.h>
  6. #include <linux/i2c.h>
  7. #include <linux/module.h>
  8. #include <linux/of_gpio.h>
  9. #include <linux/regulator/consumer.h>
  10. #include <linux/thermal.h>
  11. #define MAX31760_CTRL_REG1 0x00
  12. #define MAX31760_CTRL_REG2 0x01
  13. #define MAX31760_CTRL_REG3 0x02
  14. #define MAX31760_DUTY_CYCLE_CTRL_REG 0x50
  15. #define MAX31760_TC1H_REG 0x52
  16. #define MAX31760_TC1L_REG 0x53
  17. #define MAX31760_TC2H_REG 0x54
  18. #define MAX31760_TC2L_REG 0x55
  19. #define VDD_MAX_UV 3300000
  20. #define VDD_MIN_UV 3296000
  21. #define VDD_LOAD_UA 300000
  22. #define VCCA_MAX_UV 1800000
  23. #define VCCA_MIN_UV 1800000
  24. #define VCCA_LOAD_UA 600000
  25. #define FAN_SPEED_LEVEL0 0
  26. #define FAN_SPEED_MAX 100
  27. #define SPEED_CAL_CONST (60 * 100000)
  28. #define MSB_CONVERT_DEC (256)
  29. #define PWM_FACTOR 39
  30. struct max31760_data {
  31. struct device *dev;
  32. struct i2c_client *i2c_client;
  33. struct thermal_cooling_device *cdev;
  34. struct mutex update_lock;
  35. struct regulator *vdd_reg;
  36. struct regulator *vcca_reg;
  37. u32 fan_num;
  38. u32 pwr_en_gpio;
  39. unsigned int cur_state;
  40. atomic_t in_suspend;
  41. };
  42. static int max31760_read_byte(struct max31760_data *pdata, u8 reg, u8 *val)
  43. {
  44. int ret;
  45. struct i2c_client *client = pdata->i2c_client;
  46. ret = i2c_smbus_read_byte_data(client, reg);
  47. if (ret < 0)
  48. dev_err(pdata->dev, "failed read reg 0x%02x failure, ret:%d\n", reg, ret);
  49. *val = (u8)ret;
  50. dev_dbg(pdata->dev, "success read reg 0x%x=0x%x\n", reg, *val);
  51. return ret;
  52. }
  53. static int max31760_write_byte(struct max31760_data *pdata, u8 reg, u8 val)
  54. {
  55. int ret = 0;
  56. struct i2c_client *client = pdata->i2c_client;
  57. ret = i2c_smbus_write_byte_data(client, reg, val);
  58. if (ret < 0) {
  59. dev_err(pdata->dev, "failed write reg %#x failure, ret:%d\n", reg, ret);
  60. return ret;
  61. }
  62. dev_dbg(pdata->dev, "successfully write reg %#x=%#x\n", reg, val);
  63. return 0;
  64. }
  65. static void max31760_enable_gpio(struct max31760_data *pdata, int on)
  66. {
  67. gpio_direction_output(pdata->pwr_en_gpio, on);
  68. dev_dbg(pdata->dev, "max31760 gpio:%d set to %d\n", pdata->pwr_en_gpio, on);
  69. usleep_range(20000, 20100);
  70. }
  71. static void max31760_speed_control(struct max31760_data *pdata, unsigned long level)
  72. {
  73. unsigned long data;
  74. data = level * 255 / 100;
  75. max31760_write_byte(pdata, MAX31760_DUTY_CYCLE_CTRL_REG, data);
  76. }
  77. static void max31760_set_cur_state_common(struct max31760_data *pdata,
  78. unsigned long state)
  79. {
  80. if (!atomic_read(&pdata->in_suspend))
  81. max31760_speed_control(pdata, state);
  82. pdata->cur_state = state;
  83. }
  84. static int max31760_get_max_state(struct thermal_cooling_device *cdev,
  85. unsigned long *state)
  86. {
  87. *state = FAN_SPEED_MAX;
  88. return 0;
  89. }
  90. static int max31760_get_cur_state(struct thermal_cooling_device *cdev,
  91. unsigned long *state)
  92. {
  93. struct max31760_data *data = cdev->devdata;
  94. mutex_lock(&data->update_lock);
  95. *state = data->cur_state;
  96. mutex_unlock(&data->update_lock);
  97. return 0;
  98. }
  99. static int max31760_set_cur_state(struct thermal_cooling_device *cdev,
  100. unsigned long state)
  101. {
  102. struct max31760_data *data = cdev->devdata;
  103. if (state > FAN_SPEED_MAX) {
  104. dev_err(data->dev, "fail to set current state\n");
  105. return -EINVAL;
  106. }
  107. mutex_lock(&data->update_lock);
  108. max31760_set_cur_state_common(data, state);
  109. mutex_unlock(&data->update_lock);
  110. return 0;
  111. }
  112. static struct thermal_cooling_device_ops max31760_cooling_ops = {
  113. .get_max_state = max31760_get_max_state,
  114. .get_cur_state = max31760_get_cur_state,
  115. .set_cur_state = max31760_set_cur_state,
  116. };
  117. static ssize_t speed_control_show(struct device *dev, struct device_attribute *attr,
  118. char *buf)
  119. {
  120. struct max31760_data *data = dev_get_drvdata(dev);
  121. int ret;
  122. if (!data) {
  123. pr_err("invalid driver pointer\n");
  124. return -ENODEV;
  125. }
  126. ret = scnprintf(buf, PAGE_SIZE, "%d\n", data->cur_state);
  127. return ret;
  128. }
  129. static ssize_t speed_control_store(struct device *dev,
  130. struct device_attribute *attr,
  131. const char *buf, size_t count)
  132. {
  133. struct max31760_data *data = dev_get_drvdata(dev);
  134. unsigned long value;
  135. if (kstrtoul(buf, 0, &value))
  136. return -EINVAL;
  137. mutex_lock(&data->update_lock);
  138. max31760_set_cur_state_common(data, value);
  139. mutex_unlock(&data->update_lock);
  140. return count;
  141. }
  142. static int max31760_read_speed(struct max31760_data *data,
  143. u8 index, u32 *speed)
  144. {
  145. u8 tch = 0, tcl = 0;
  146. u8 value = 0;
  147. int ret = 0;
  148. if (index == 1) {
  149. ret = max31760_read_byte(data, MAX31760_TC1H_REG, &value);
  150. if (ret < 0)
  151. return ret;
  152. tch = value;
  153. ret = max31760_read_byte(data, MAX31760_TC1L_REG, &value);
  154. if (ret < 0)
  155. return ret;
  156. tcl = value;
  157. } else if (index == 2) {
  158. ret = max31760_read_byte(data, MAX31760_TC2H_REG, &value);
  159. if (ret < 0)
  160. return ret;
  161. tch = value;
  162. ret = max31760_read_byte(data, MAX31760_TC2L_REG, &value);
  163. if (ret < 0)
  164. return ret;
  165. tcl = value;
  166. }
  167. *speed = SPEED_CAL_CONST / (tch * MSB_CONVERT_DEC + tcl) / 2;
  168. return 0;
  169. }
  170. static ssize_t speed_tc1_show(struct device *dev, struct device_attribute *attr,
  171. char *buf)
  172. {
  173. struct max31760_data *data = dev_get_drvdata(dev);
  174. u32 speed;
  175. int ret;
  176. if (!data) {
  177. pr_err("invalid driver pointer\n");
  178. return -ENODEV;
  179. }
  180. ret = max31760_read_speed(data, 1, &speed);
  181. if (ret < 0) {
  182. dev_err(data->dev, "can not read fan speed\n");
  183. return -EINVAL;
  184. }
  185. ret = scnprintf(buf, PAGE_SIZE, "%d\n", speed);
  186. dev_dbg(data->dev, "TC1 current speed is %d\n", speed);
  187. return ret;
  188. }
  189. static ssize_t speed_tc2_show(struct device *dev, struct device_attribute *attr,
  190. char *buf)
  191. {
  192. struct max31760_data *data = dev_get_drvdata(dev);
  193. u32 speed;
  194. int ret;
  195. if (!data) {
  196. pr_err("invalid driver pointer\n");
  197. return -ENODEV;
  198. }
  199. ret = max31760_read_speed(data, 2, &speed);
  200. if (ret < 0) {
  201. dev_err(data->dev, "can not read fan speed\n");
  202. return -EINVAL;
  203. }
  204. ret = scnprintf(buf, PAGE_SIZE, "%d\n", speed);
  205. dev_dbg(data->dev, "TC2 current speed is %d\n", speed);
  206. return ret;
  207. }
  208. static ssize_t pwm_duty_show(struct device *dev, struct device_attribute *attr,
  209. char *buf)
  210. {
  211. struct max31760_data *data = dev_get_drvdata(dev);
  212. u32 duty;
  213. u8 value = 0;
  214. int ret;
  215. if (!data) {
  216. pr_err("invalid driver pointer\n");
  217. return -ENODEV;
  218. }
  219. ret = max31760_read_byte(data, MAX31760_DUTY_CYCLE_CTRL_REG, &value);
  220. if (ret < 0)
  221. return ret;
  222. duty = value * PWM_FACTOR;
  223. ret = scnprintf(buf, PAGE_SIZE, "%d\n", duty);
  224. return ret;
  225. }
  226. static DEVICE_ATTR_RW(speed_control);
  227. static DEVICE_ATTR_RO(speed_tc1);
  228. static DEVICE_ATTR_RO(speed_tc2);
  229. static DEVICE_ATTR_RO(pwm_duty);
  230. static struct attribute *max31760_sysfs_attrs[] = {
  231. &dev_attr_speed_control.attr,
  232. &dev_attr_speed_tc1.attr,
  233. &dev_attr_speed_tc2.attr,
  234. &dev_attr_pwm_duty.attr,
  235. NULL,
  236. };
  237. static int max31760_register_cdev(struct max31760_data *pdata)
  238. {
  239. int ret = 0;
  240. char cdev_name[THERMAL_NAME_LENGTH] = "";
  241. snprintf(cdev_name, THERMAL_NAME_LENGTH, "fan-max31760");
  242. pdata->cdev = thermal_of_cooling_device_register(pdata->dev->of_node, cdev_name,
  243. pdata, &max31760_cooling_ops);
  244. if (IS_ERR(pdata->cdev)) {
  245. ret = PTR_ERR(pdata->cdev);
  246. dev_err(pdata->dev, "Cooling register failed for %s, ret:%d\n", cdev_name, ret);
  247. pdata->cdev = NULL;
  248. return ret;
  249. }
  250. dev_dbg(pdata->dev, "Cooling register success for %s\n", cdev_name);
  251. return 0;
  252. }
  253. static void max31760_hw_init(struct max31760_data *pdata)
  254. {
  255. max31760_write_byte(pdata, MAX31760_CTRL_REG1, 0x19);
  256. max31760_write_byte(pdata, MAX31760_CTRL_REG2, 0x11);
  257. if (pdata->fan_num == 1)
  258. max31760_write_byte(pdata, MAX31760_CTRL_REG3, 0x31);
  259. else if (pdata->fan_num == 2)
  260. max31760_write_byte(pdata, MAX31760_CTRL_REG3, 0x33);
  261. mutex_lock(&pdata->update_lock);
  262. max31760_speed_control(pdata, FAN_SPEED_LEVEL0);
  263. pdata->cur_state = FAN_SPEED_LEVEL0;
  264. mutex_unlock(&pdata->update_lock);
  265. atomic_set(&pdata->in_suspend, 0);
  266. }
  267. static int max31760_parse_dt(struct max31760_data *pdata)
  268. {
  269. int ret = 0;
  270. struct device_node *node = pdata->dev->of_node;
  271. if (!node) {
  272. pr_err("device tree info missing\n");
  273. return -EINVAL;
  274. }
  275. ret = of_property_read_u32(node, "maxim,fan-num", &pdata->fan_num);
  276. if (ret)
  277. pdata->fan_num = 1;
  278. if (pdata->fan_num > 2)
  279. pdata->fan_num = 2;
  280. pdata->pwr_en_gpio = of_get_named_gpio(node, "maxim,pwr-en-gpio", 0);
  281. if (!gpio_is_valid(pdata->pwr_en_gpio)) {
  282. dev_err(pdata->dev, "enable gpio not specified\n");
  283. return -EINVAL;
  284. }
  285. ret = gpio_request(pdata->pwr_en_gpio, "pwr_en_gpio");
  286. if (ret) {
  287. pr_err("enable gpio request failed, ret:%d\n", ret);
  288. goto error;
  289. }
  290. max31760_enable_gpio(pdata, 1);
  291. return ret;
  292. error:
  293. gpio_free(pdata->pwr_en_gpio);
  294. return ret;
  295. }
  296. static struct attribute_group max31760_attribute_group = {
  297. .attrs = max31760_sysfs_attrs,
  298. };
  299. static int max31760_enable_vregs(struct max31760_data *pdata)
  300. {
  301. int ret = 0;
  302. pdata->vdd_reg = devm_regulator_get(pdata->dev, "maxim,vdd");
  303. if (IS_ERR(pdata->vdd_reg)) {
  304. ret = PTR_ERR(pdata->vdd_reg);
  305. dev_err(pdata->dev, "couldn't get vdd_reg regulator, ret:%d\n", ret);
  306. pdata->vdd_reg = NULL;
  307. return ret;
  308. }
  309. regulator_set_voltage(pdata->vdd_reg, VDD_MIN_UV, VDD_MAX_UV);
  310. regulator_set_load(pdata->vdd_reg, VDD_LOAD_UA);
  311. ret = regulator_enable(pdata->vdd_reg);
  312. if (ret < 0) {
  313. dev_err(pdata->dev, "vdd_reg regulator failed, ret:%d\n", ret);
  314. regulator_set_voltage(pdata->vdd_reg, 0, VDD_MAX_UV);
  315. regulator_set_load(pdata->vdd_reg, 0);
  316. return -EINVAL;
  317. }
  318. pdata->vcca_reg = devm_regulator_get(pdata->dev, "maxim,vcca");
  319. if (IS_ERR(pdata->vcca_reg)) {
  320. ret = PTR_ERR(pdata->vcca_reg);
  321. dev_err(pdata->dev, "couldn't get vcca_reg regulator, ret:%d\n", ret);
  322. pdata->vcca_reg = NULL;
  323. return ret;
  324. }
  325. regulator_set_voltage(pdata->vcca_reg, VCCA_MIN_UV, VCCA_MAX_UV);
  326. regulator_set_load(pdata->vcca_reg, VCCA_LOAD_UA);
  327. ret = regulator_enable(pdata->vcca_reg);
  328. if (ret < 0) {
  329. dev_err(pdata->dev, "vcca_reg regulator failed, ret:%d\n", ret);
  330. regulator_set_voltage(pdata->vcca_reg, 0, VCCA_MAX_UV);
  331. regulator_set_load(pdata->vcca_reg, 0);
  332. return -EINVAL;
  333. }
  334. return 0;
  335. }
  336. static void max31760_remove(struct i2c_client *client)
  337. {
  338. struct max31760_data *pdata = i2c_get_clientdata(client);
  339. if (!pdata)
  340. return;
  341. thermal_cooling_device_unregister(pdata->cdev);
  342. regulator_disable(pdata->vdd_reg);
  343. regulator_disable(pdata->vcca_reg);
  344. max31760_enable_gpio(pdata, 0);
  345. gpio_free(pdata->pwr_en_gpio);
  346. }
  347. static int max31760_probe(struct i2c_client *client, const struct i2c_device_id *id)
  348. {
  349. int ret = 0;
  350. struct max31760_data *pdata;
  351. if (!client || !client->dev.of_node) {
  352. pr_err("max31760 invalid input\n");
  353. return -EINVAL;
  354. }
  355. if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
  356. dev_err(&client->dev, "device doesn't support I2C\n");
  357. return -ENODEV;
  358. }
  359. pdata = devm_kzalloc(&client->dev, sizeof(struct max31760_data), GFP_KERNEL);
  360. if (!pdata)
  361. return -ENOMEM;
  362. pdata->dev = &client->dev;
  363. pdata->i2c_client = client;
  364. i2c_set_clientdata(client, pdata);
  365. dev_set_drvdata(&client->dev, pdata);
  366. mutex_init(&pdata->update_lock);
  367. ret = max31760_parse_dt(pdata);
  368. if (ret) {
  369. dev_err(pdata->dev, "failed to parse device tree, ret:%d\n", ret);
  370. goto fail_parse_dt;
  371. }
  372. ret = max31760_enable_vregs(pdata);
  373. if (ret) {
  374. dev_err(pdata->dev, "failed to enable regulators, ret:%d\n", ret);
  375. goto fail_enable_vregs;
  376. }
  377. max31760_hw_init(pdata);
  378. ret = max31760_register_cdev(pdata);
  379. if (ret) {
  380. dev_err(pdata->dev, "failed to register cooling device, ret:%d\n", ret);
  381. goto fail_register_cdev;
  382. }
  383. ret = devm_device_add_group(&client->dev, &max31760_attribute_group);
  384. if (ret < 0) {
  385. dev_err(pdata->dev, "couldn't register sysfs group\n");
  386. return ret;
  387. }
  388. return ret;
  389. fail_register_cdev:
  390. max31760_remove(client);
  391. return ret;
  392. fail_enable_vregs:
  393. max31760_enable_gpio(pdata, 0);
  394. gpio_free(pdata->pwr_en_gpio);
  395. fail_parse_dt:
  396. i2c_set_clientdata(client, NULL);
  397. dev_set_drvdata(&client->dev, NULL);
  398. return ret;
  399. }
  400. static void max31760_shutdown(struct i2c_client *client)
  401. {
  402. max31760_remove(client);
  403. }
  404. static int max31760_suspend(struct device *dev)
  405. {
  406. struct max31760_data *pdata = dev_get_drvdata(dev);
  407. dev_dbg(dev, "enter suspend now\n");
  408. if (pdata) {
  409. atomic_set(&pdata->in_suspend, 1);
  410. mutex_lock(&pdata->update_lock);
  411. max31760_speed_control(pdata, FAN_SPEED_LEVEL0);
  412. max31760_enable_gpio(pdata, 0);
  413. regulator_disable(pdata->vdd_reg);
  414. mutex_unlock(&pdata->update_lock);
  415. }
  416. return 0;
  417. }
  418. static int max31760_resume(struct device *dev)
  419. {
  420. struct max31760_data *pdata = dev_get_drvdata(dev);
  421. int ret;
  422. dev_dbg(dev, "enter resume now\n");
  423. if (pdata) {
  424. atomic_set(&pdata->in_suspend, 0);
  425. mutex_lock(&pdata->update_lock);
  426. max31760_enable_gpio(pdata, 1);
  427. ret = regulator_enable(pdata->vdd_reg);
  428. if (ret < 0)
  429. dev_err(pdata->dev, "vdd_reg regulator failed, ret:%d\n", ret);
  430. max31760_write_byte(pdata, MAX31760_CTRL_REG1, 0x19);
  431. max31760_write_byte(pdata, MAX31760_CTRL_REG2, 0x11);
  432. if (pdata->fan_num == 1)
  433. max31760_write_byte(pdata, MAX31760_CTRL_REG3, 0x31);
  434. else if (pdata->fan_num == 2)
  435. max31760_write_byte(pdata, MAX31760_CTRL_REG3, 0x33);
  436. max31760_set_cur_state_common(pdata, pdata->cur_state);
  437. mutex_unlock(&pdata->update_lock);
  438. }
  439. return 0;
  440. }
  441. static const struct of_device_id max31760_id_table[] = {
  442. { .compatible = "maxim,max31760",},
  443. { },
  444. };
  445. static const struct i2c_device_id max31760_i2c_table[] = {
  446. { "max31760", 0 },
  447. { },
  448. };
  449. static SIMPLE_DEV_PM_OPS(max31760_pm_ops, max31760_suspend, max31760_resume);
  450. static struct i2c_driver max31760_i2c_driver = {
  451. .probe = max31760_probe,
  452. .remove = max31760_remove,
  453. .shutdown = max31760_shutdown,
  454. .driver = {
  455. .name = "max31760",
  456. .of_match_table = max31760_id_table,
  457. .pm = &max31760_pm_ops,
  458. },
  459. .id_table = max31760_i2c_table,
  460. };
  461. module_i2c_driver(max31760_i2c_driver);
  462. MODULE_DEVICE_TABLE(i2c, max31760_i2c_table);
  463. MODULE_DESCRIPTION("Maxim 31760 Fan Controller");
  464. MODULE_LICENSE("GPL");