17ebd8b66SMauro Carvalho ChehabHow to Get Your Patch Accepted Into the Hwmon Subsystem 27ebd8b66SMauro Carvalho Chehab======================================================= 37ebd8b66SMauro Carvalho Chehab 47ebd8b66SMauro Carvalho ChehabThis text is a collection of suggestions for people writing patches or 57ebd8b66SMauro Carvalho Chehabdrivers for the hwmon subsystem. Following these suggestions will greatly 67ebd8b66SMauro Carvalho Chehabincrease the chances of your change being accepted. 77ebd8b66SMauro Carvalho Chehab 87ebd8b66SMauro Carvalho Chehab 97ebd8b66SMauro Carvalho Chehab1. General 107ebd8b66SMauro Carvalho Chehab---------- 117ebd8b66SMauro Carvalho Chehab 127ebd8b66SMauro Carvalho Chehab* It should be unnecessary to mention, but please read and follow: 137ebd8b66SMauro Carvalho Chehab 147ebd8b66SMauro Carvalho Chehab - Documentation/process/submit-checklist.rst 157ebd8b66SMauro Carvalho Chehab - Documentation/process/submitting-drivers.rst 167ebd8b66SMauro Carvalho Chehab - Documentation/process/submitting-patches.rst 177ebd8b66SMauro Carvalho Chehab - Documentation/process/coding-style.rst 187ebd8b66SMauro Carvalho Chehab 197ebd8b66SMauro Carvalho Chehab* Please run your patch through 'checkpatch --strict'. There should be no 207ebd8b66SMauro Carvalho Chehab errors, no warnings, and few if any check messages. If there are any 217ebd8b66SMauro Carvalho Chehab messages, please be prepared to explain. 227ebd8b66SMauro Carvalho Chehab 237ebd8b66SMauro Carvalho Chehab* If your patch generates checkpatch errors, warnings, or check messages, 247ebd8b66SMauro Carvalho Chehab please refrain from explanations such as "I prefer that coding style". 257ebd8b66SMauro Carvalho Chehab Keep in mind that each unnecessary message helps hiding a real problem, 267ebd8b66SMauro Carvalho Chehab and a consistent coding style makes it easier for others to understand 277ebd8b66SMauro Carvalho Chehab and review the code. 287ebd8b66SMauro Carvalho Chehab 297ebd8b66SMauro Carvalho Chehab* Please test your patch thoroughly. We are not your test group. 307ebd8b66SMauro Carvalho Chehab Sometimes a patch can not or not completely be tested because of missing 317ebd8b66SMauro Carvalho Chehab hardware. In such cases, you should test-build the code on at least one 327ebd8b66SMauro Carvalho Chehab architecture. If run-time testing was not achieved, it should be written 337ebd8b66SMauro Carvalho Chehab explicitly below the patch header. 347ebd8b66SMauro Carvalho Chehab 357ebd8b66SMauro Carvalho Chehab* If your patch (or the driver) is affected by configuration options such as 367ebd8b66SMauro Carvalho Chehab CONFIG_SMP, make sure it compiles for all configuration variants. 377ebd8b66SMauro Carvalho Chehab 387ebd8b66SMauro Carvalho Chehab 397ebd8b66SMauro Carvalho Chehab2. Adding functionality to existing drivers 407ebd8b66SMauro Carvalho Chehab------------------------------------------- 417ebd8b66SMauro Carvalho Chehab 427ebd8b66SMauro Carvalho Chehab* Make sure the documentation in Documentation/hwmon/<driver_name>.rst is up to 437ebd8b66SMauro Carvalho Chehab date. 447ebd8b66SMauro Carvalho Chehab 457ebd8b66SMauro Carvalho Chehab* Make sure the information in Kconfig is up to date. 467ebd8b66SMauro Carvalho Chehab 477ebd8b66SMauro Carvalho Chehab* If the added functionality requires some cleanup or structural changes, split 487ebd8b66SMauro Carvalho Chehab your patch into a cleanup part and the actual addition. This makes it easier 497ebd8b66SMauro Carvalho Chehab to review your changes, and to bisect any resulting problems. 507ebd8b66SMauro Carvalho Chehab 517ebd8b66SMauro Carvalho Chehab* Never mix bug fixes, cleanup, and functional enhancements in a single patch. 527ebd8b66SMauro Carvalho Chehab 537ebd8b66SMauro Carvalho Chehab 547ebd8b66SMauro Carvalho Chehab3. New drivers 557ebd8b66SMauro Carvalho Chehab-------------- 567ebd8b66SMauro Carvalho Chehab 577ebd8b66SMauro Carvalho Chehab* Running your patch or driver file(s) through checkpatch does not mean its 587ebd8b66SMauro Carvalho Chehab formatting is clean. If unsure about formatting in your new driver, run it 597ebd8b66SMauro Carvalho Chehab through Lindent. Lindent is not perfect, and you may have to do some minor 607ebd8b66SMauro Carvalho Chehab cleanup, but it is a good start. 617ebd8b66SMauro Carvalho Chehab 627ebd8b66SMauro Carvalho Chehab* Consider adding yourself to MAINTAINERS. 637ebd8b66SMauro Carvalho Chehab 647ebd8b66SMauro Carvalho Chehab* Document the driver in Documentation/hwmon/<driver_name>.rst. 657ebd8b66SMauro Carvalho Chehab 667ebd8b66SMauro Carvalho Chehab* Add the driver to Kconfig and Makefile in alphabetical order. 677ebd8b66SMauro Carvalho Chehab 687ebd8b66SMauro Carvalho Chehab* Make sure that all dependencies are listed in Kconfig. 697ebd8b66SMauro Carvalho Chehab 707ebd8b66SMauro Carvalho Chehab* Please list include files in alphabetic order. 717ebd8b66SMauro Carvalho Chehab 727ebd8b66SMauro Carvalho Chehab* Please align continuation lines with '(' on the previous line. 737ebd8b66SMauro Carvalho Chehab 747ebd8b66SMauro Carvalho Chehab* Avoid forward declarations if you can. Rearrange the code if necessary. 757ebd8b66SMauro Carvalho Chehab 767ebd8b66SMauro Carvalho Chehab* Avoid macros to generate groups of sensor attributes. It not only confuses 777ebd8b66SMauro Carvalho Chehab checkpatch, but also makes it more difficult to review the code. 787ebd8b66SMauro Carvalho Chehab 797ebd8b66SMauro Carvalho Chehab* Avoid calculations in macros and macro-generated functions. While such macros 807ebd8b66SMauro Carvalho Chehab may save a line or so in the source, it obfuscates the code and makes code 817ebd8b66SMauro Carvalho Chehab review more difficult. It may also result in code which is more complicated 827ebd8b66SMauro Carvalho Chehab than necessary. Use inline functions or just regular functions instead. 837ebd8b66SMauro Carvalho Chehab 847ebd8b66SMauro Carvalho Chehab* Limit the number of kernel log messages. In general, your driver should not 857ebd8b66SMauro Carvalho Chehab generate an error message just because a runtime operation failed. Report 867ebd8b66SMauro Carvalho Chehab errors to user space instead, using an appropriate error code. Keep in mind 877ebd8b66SMauro Carvalho Chehab that kernel error log messages not only fill up the kernel log, but also are 887ebd8b66SMauro Carvalho Chehab printed synchronously, most likely with interrupt disabled, often to a serial 897ebd8b66SMauro Carvalho Chehab console. Excessive logging can seriously affect system performance. 907ebd8b66SMauro Carvalho Chehab 917ebd8b66SMauro Carvalho Chehab* Use devres functions whenever possible to allocate resources. For rationale 92fe34c89dSMauro Carvalho Chehab and supported functions, please see Documentation/driver-api/driver-model/devres.rst. 937ebd8b66SMauro Carvalho Chehab If a function is not supported by devres, consider using devm_add_action(). 947ebd8b66SMauro Carvalho Chehab 957ebd8b66SMauro Carvalho Chehab* If the driver has a detect function, make sure it is silent. Debug messages 967ebd8b66SMauro Carvalho Chehab and messages printed after a successful detection are acceptable, but it 977ebd8b66SMauro Carvalho Chehab must not print messages such as "Chip XXX not found/supported". 987ebd8b66SMauro Carvalho Chehab 997ebd8b66SMauro Carvalho Chehab Keep in mind that the detect function will run for all drivers supporting an 1007ebd8b66SMauro Carvalho Chehab address if a chip is detected on that address. Unnecessary messages will just 1017ebd8b66SMauro Carvalho Chehab pollute the kernel log and not provide any value. 1027ebd8b66SMauro Carvalho Chehab 1037ebd8b66SMauro Carvalho Chehab* Provide a detect function if and only if a chip can be detected reliably. 1047ebd8b66SMauro Carvalho Chehab 1057ebd8b66SMauro Carvalho Chehab* Only the following I2C addresses shall be probed: 0x18-0x1f, 0x28-0x2f, 1067ebd8b66SMauro Carvalho Chehab 0x48-0x4f, 0x58, 0x5c, 0x73 and 0x77. Probing other addresses is strongly 1077ebd8b66SMauro Carvalho Chehab discouraged as it is known to cause trouble with other (non-hwmon) I2C 1087ebd8b66SMauro Carvalho Chehab chips. If your chip lives at an address which can't be probed then the 1097ebd8b66SMauro Carvalho Chehab device will have to be instantiated explicitly (which is always better 1107ebd8b66SMauro Carvalho Chehab anyway.) 1117ebd8b66SMauro Carvalho Chehab 1127ebd8b66SMauro Carvalho Chehab* Avoid writing to chip registers in the detect function. If you have to write, 1137ebd8b66SMauro Carvalho Chehab only do it after you have already gathered enough data to be certain that the 1147ebd8b66SMauro Carvalho Chehab detection is going to be successful. 1157ebd8b66SMauro Carvalho Chehab 1167ebd8b66SMauro Carvalho Chehab Keep in mind that the chip might not be what your driver believes it is, and 1177ebd8b66SMauro Carvalho Chehab writing to it might cause a bad misconfiguration. 1187ebd8b66SMauro Carvalho Chehab 1197ebd8b66SMauro Carvalho Chehab* Make sure there are no race conditions in the probe function. Specifically, 1207ebd8b66SMauro Carvalho Chehab completely initialize your chip and your driver first, then register with 1217ebd8b66SMauro Carvalho Chehab the hwmon subsystem. 1227ebd8b66SMauro Carvalho Chehab 123*9b0cffa6SGuenter Roeck* Use devm_hwmon_device_register_with_info() or, if your driver needs a remove 124*9b0cffa6SGuenter Roeck function, hwmon_device_register_with_info() to register your driver with the 1257ebd8b66SMauro Carvalho Chehab hwmon subsystem. Try using devm_add_action() instead of a remove function if 1267ebd8b66SMauro Carvalho Chehab possible. Do not use hwmon_device_register(). 1277ebd8b66SMauro Carvalho Chehab 1287ebd8b66SMauro Carvalho Chehab* Your driver should be buildable as module. If not, please be prepared to 1297ebd8b66SMauro Carvalho Chehab explain why it has to be built into the kernel. 1307ebd8b66SMauro Carvalho Chehab 1317ebd8b66SMauro Carvalho Chehab* Do not provide support for deprecated sysfs attributes. 1327ebd8b66SMauro Carvalho Chehab 1337ebd8b66SMauro Carvalho Chehab* Do not create non-standard attributes unless really needed. If you have to use 1347ebd8b66SMauro Carvalho Chehab non-standard attributes, or you believe you do, discuss it on the mailing list 1357ebd8b66SMauro Carvalho Chehab first. Either case, provide a detailed explanation why you need the 1367ebd8b66SMauro Carvalho Chehab non-standard attribute(s). 1377ebd8b66SMauro Carvalho Chehab Standard attributes are specified in Documentation/hwmon/sysfs-interface.rst. 1387ebd8b66SMauro Carvalho Chehab 1397ebd8b66SMauro Carvalho Chehab* When deciding which sysfs attributes to support, look at the chip's 1407ebd8b66SMauro Carvalho Chehab capabilities. While we do not expect your driver to support everything the 1417ebd8b66SMauro Carvalho Chehab chip may offer, it should at least support all limits and alarms. 1427ebd8b66SMauro Carvalho Chehab 1437ebd8b66SMauro Carvalho Chehab* Last but not least, please check if a driver for your chip already exists 1447ebd8b66SMauro Carvalho Chehab before starting to write a new driver. Especially for temperature sensors, 1457ebd8b66SMauro Carvalho Chehab new chips are often variants of previously released chips. In some cases, 1467ebd8b66SMauro Carvalho Chehab a presumably new chip may simply have been relabeled. 147