1*7ebd8b66SMauro Carvalho ChehabHow to Get Your Patch Accepted Into the Hwmon Subsystem 2*7ebd8b66SMauro Carvalho Chehab======================================================= 3*7ebd8b66SMauro Carvalho Chehab 4*7ebd8b66SMauro Carvalho ChehabThis text is a collection of suggestions for people writing patches or 5*7ebd8b66SMauro Carvalho Chehabdrivers for the hwmon subsystem. Following these suggestions will greatly 6*7ebd8b66SMauro Carvalho Chehabincrease the chances of your change being accepted. 7*7ebd8b66SMauro Carvalho Chehab 8*7ebd8b66SMauro Carvalho Chehab 9*7ebd8b66SMauro Carvalho Chehab1. General 10*7ebd8b66SMauro Carvalho Chehab---------- 11*7ebd8b66SMauro Carvalho Chehab 12*7ebd8b66SMauro Carvalho Chehab* It should be unnecessary to mention, but please read and follow: 13*7ebd8b66SMauro Carvalho Chehab 14*7ebd8b66SMauro Carvalho Chehab - Documentation/process/submit-checklist.rst 15*7ebd8b66SMauro Carvalho Chehab - Documentation/process/submitting-drivers.rst 16*7ebd8b66SMauro Carvalho Chehab - Documentation/process/submitting-patches.rst 17*7ebd8b66SMauro Carvalho Chehab - Documentation/process/coding-style.rst 18*7ebd8b66SMauro Carvalho Chehab 19*7ebd8b66SMauro Carvalho Chehab* Please run your patch through 'checkpatch --strict'. There should be no 20*7ebd8b66SMauro Carvalho Chehab errors, no warnings, and few if any check messages. If there are any 21*7ebd8b66SMauro Carvalho Chehab messages, please be prepared to explain. 22*7ebd8b66SMauro Carvalho Chehab 23*7ebd8b66SMauro Carvalho Chehab* If your patch generates checkpatch errors, warnings, or check messages, 24*7ebd8b66SMauro Carvalho Chehab please refrain from explanations such as "I prefer that coding style". 25*7ebd8b66SMauro Carvalho Chehab Keep in mind that each unnecessary message helps hiding a real problem, 26*7ebd8b66SMauro Carvalho Chehab and a consistent coding style makes it easier for others to understand 27*7ebd8b66SMauro Carvalho Chehab and review the code. 28*7ebd8b66SMauro Carvalho Chehab 29*7ebd8b66SMauro Carvalho Chehab* Please test your patch thoroughly. We are not your test group. 30*7ebd8b66SMauro Carvalho Chehab Sometimes a patch can not or not completely be tested because of missing 31*7ebd8b66SMauro Carvalho Chehab hardware. In such cases, you should test-build the code on at least one 32*7ebd8b66SMauro Carvalho Chehab architecture. If run-time testing was not achieved, it should be written 33*7ebd8b66SMauro Carvalho Chehab explicitly below the patch header. 34*7ebd8b66SMauro Carvalho Chehab 35*7ebd8b66SMauro Carvalho Chehab* If your patch (or the driver) is affected by configuration options such as 36*7ebd8b66SMauro Carvalho Chehab CONFIG_SMP, make sure it compiles for all configuration variants. 37*7ebd8b66SMauro Carvalho Chehab 38*7ebd8b66SMauro Carvalho Chehab 39*7ebd8b66SMauro Carvalho Chehab2. Adding functionality to existing drivers 40*7ebd8b66SMauro Carvalho Chehab------------------------------------------- 41*7ebd8b66SMauro Carvalho Chehab 42*7ebd8b66SMauro Carvalho Chehab* Make sure the documentation in Documentation/hwmon/<driver_name>.rst is up to 43*7ebd8b66SMauro Carvalho Chehab date. 44*7ebd8b66SMauro Carvalho Chehab 45*7ebd8b66SMauro Carvalho Chehab* Make sure the information in Kconfig is up to date. 46*7ebd8b66SMauro Carvalho Chehab 47*7ebd8b66SMauro Carvalho Chehab* If the added functionality requires some cleanup or structural changes, split 48*7ebd8b66SMauro Carvalho Chehab your patch into a cleanup part and the actual addition. This makes it easier 49*7ebd8b66SMauro Carvalho Chehab to review your changes, and to bisect any resulting problems. 50*7ebd8b66SMauro Carvalho Chehab 51*7ebd8b66SMauro Carvalho Chehab* Never mix bug fixes, cleanup, and functional enhancements in a single patch. 52*7ebd8b66SMauro Carvalho Chehab 53*7ebd8b66SMauro Carvalho Chehab 54*7ebd8b66SMauro Carvalho Chehab3. New drivers 55*7ebd8b66SMauro Carvalho Chehab-------------- 56*7ebd8b66SMauro Carvalho Chehab 57*7ebd8b66SMauro Carvalho Chehab* Running your patch or driver file(s) through checkpatch does not mean its 58*7ebd8b66SMauro Carvalho Chehab formatting is clean. If unsure about formatting in your new driver, run it 59*7ebd8b66SMauro Carvalho Chehab through Lindent. Lindent is not perfect, and you may have to do some minor 60*7ebd8b66SMauro Carvalho Chehab cleanup, but it is a good start. 61*7ebd8b66SMauro Carvalho Chehab 62*7ebd8b66SMauro Carvalho Chehab* Consider adding yourself to MAINTAINERS. 63*7ebd8b66SMauro Carvalho Chehab 64*7ebd8b66SMauro Carvalho Chehab* Document the driver in Documentation/hwmon/<driver_name>.rst. 65*7ebd8b66SMauro Carvalho Chehab 66*7ebd8b66SMauro Carvalho Chehab* Add the driver to Kconfig and Makefile in alphabetical order. 67*7ebd8b66SMauro Carvalho Chehab 68*7ebd8b66SMauro Carvalho Chehab* Make sure that all dependencies are listed in Kconfig. 69*7ebd8b66SMauro Carvalho Chehab 70*7ebd8b66SMauro Carvalho Chehab* Please list include files in alphabetic order. 71*7ebd8b66SMauro Carvalho Chehab 72*7ebd8b66SMauro Carvalho Chehab* Please align continuation lines with '(' on the previous line. 73*7ebd8b66SMauro Carvalho Chehab 74*7ebd8b66SMauro Carvalho Chehab* Avoid forward declarations if you can. Rearrange the code if necessary. 75*7ebd8b66SMauro Carvalho Chehab 76*7ebd8b66SMauro Carvalho Chehab* Avoid macros to generate groups of sensor attributes. It not only confuses 77*7ebd8b66SMauro Carvalho Chehab checkpatch, but also makes it more difficult to review the code. 78*7ebd8b66SMauro Carvalho Chehab 79*7ebd8b66SMauro Carvalho Chehab* Avoid calculations in macros and macro-generated functions. While such macros 80*7ebd8b66SMauro Carvalho Chehab may save a line or so in the source, it obfuscates the code and makes code 81*7ebd8b66SMauro Carvalho Chehab review more difficult. It may also result in code which is more complicated 82*7ebd8b66SMauro Carvalho Chehab than necessary. Use inline functions or just regular functions instead. 83*7ebd8b66SMauro Carvalho Chehab 84*7ebd8b66SMauro Carvalho Chehab* Limit the number of kernel log messages. In general, your driver should not 85*7ebd8b66SMauro Carvalho Chehab generate an error message just because a runtime operation failed. Report 86*7ebd8b66SMauro Carvalho Chehab errors to user space instead, using an appropriate error code. Keep in mind 87*7ebd8b66SMauro Carvalho Chehab that kernel error log messages not only fill up the kernel log, but also are 88*7ebd8b66SMauro Carvalho Chehab printed synchronously, most likely with interrupt disabled, often to a serial 89*7ebd8b66SMauro Carvalho Chehab console. Excessive logging can seriously affect system performance. 90*7ebd8b66SMauro Carvalho Chehab 91*7ebd8b66SMauro Carvalho Chehab* Use devres functions whenever possible to allocate resources. For rationale 92*7ebd8b66SMauro Carvalho Chehab and supported functions, please see Documentation/driver-model/devres.txt. 93*7ebd8b66SMauro Carvalho Chehab If a function is not supported by devres, consider using devm_add_action(). 94*7ebd8b66SMauro Carvalho Chehab 95*7ebd8b66SMauro Carvalho Chehab* If the driver has a detect function, make sure it is silent. Debug messages 96*7ebd8b66SMauro Carvalho Chehab and messages printed after a successful detection are acceptable, but it 97*7ebd8b66SMauro Carvalho Chehab must not print messages such as "Chip XXX not found/supported". 98*7ebd8b66SMauro Carvalho Chehab 99*7ebd8b66SMauro Carvalho Chehab Keep in mind that the detect function will run for all drivers supporting an 100*7ebd8b66SMauro Carvalho Chehab address if a chip is detected on that address. Unnecessary messages will just 101*7ebd8b66SMauro Carvalho Chehab pollute the kernel log and not provide any value. 102*7ebd8b66SMauro Carvalho Chehab 103*7ebd8b66SMauro Carvalho Chehab* Provide a detect function if and only if a chip can be detected reliably. 104*7ebd8b66SMauro Carvalho Chehab 105*7ebd8b66SMauro Carvalho Chehab* Only the following I2C addresses shall be probed: 0x18-0x1f, 0x28-0x2f, 106*7ebd8b66SMauro Carvalho Chehab 0x48-0x4f, 0x58, 0x5c, 0x73 and 0x77. Probing other addresses is strongly 107*7ebd8b66SMauro Carvalho Chehab discouraged as it is known to cause trouble with other (non-hwmon) I2C 108*7ebd8b66SMauro Carvalho Chehab chips. If your chip lives at an address which can't be probed then the 109*7ebd8b66SMauro Carvalho Chehab device will have to be instantiated explicitly (which is always better 110*7ebd8b66SMauro Carvalho Chehab anyway.) 111*7ebd8b66SMauro Carvalho Chehab 112*7ebd8b66SMauro Carvalho Chehab* Avoid writing to chip registers in the detect function. If you have to write, 113*7ebd8b66SMauro Carvalho Chehab only do it after you have already gathered enough data to be certain that the 114*7ebd8b66SMauro Carvalho Chehab detection is going to be successful. 115*7ebd8b66SMauro Carvalho Chehab 116*7ebd8b66SMauro Carvalho Chehab Keep in mind that the chip might not be what your driver believes it is, and 117*7ebd8b66SMauro Carvalho Chehab writing to it might cause a bad misconfiguration. 118*7ebd8b66SMauro Carvalho Chehab 119*7ebd8b66SMauro Carvalho Chehab* Make sure there are no race conditions in the probe function. Specifically, 120*7ebd8b66SMauro Carvalho Chehab completely initialize your chip and your driver first, then register with 121*7ebd8b66SMauro Carvalho Chehab the hwmon subsystem. 122*7ebd8b66SMauro Carvalho Chehab 123*7ebd8b66SMauro Carvalho Chehab* Use devm_hwmon_device_register_with_groups() or, if your driver needs a remove 124*7ebd8b66SMauro Carvalho Chehab function, hwmon_device_register_with_groups() to register your driver with the 125*7ebd8b66SMauro Carvalho Chehab hwmon subsystem. Try using devm_add_action() instead of a remove function if 126*7ebd8b66SMauro Carvalho Chehab possible. Do not use hwmon_device_register(). 127*7ebd8b66SMauro Carvalho Chehab 128*7ebd8b66SMauro Carvalho Chehab* Your driver should be buildable as module. If not, please be prepared to 129*7ebd8b66SMauro Carvalho Chehab explain why it has to be built into the kernel. 130*7ebd8b66SMauro Carvalho Chehab 131*7ebd8b66SMauro Carvalho Chehab* Do not provide support for deprecated sysfs attributes. 132*7ebd8b66SMauro Carvalho Chehab 133*7ebd8b66SMauro Carvalho Chehab* Do not create non-standard attributes unless really needed. If you have to use 134*7ebd8b66SMauro Carvalho Chehab non-standard attributes, or you believe you do, discuss it on the mailing list 135*7ebd8b66SMauro Carvalho Chehab first. Either case, provide a detailed explanation why you need the 136*7ebd8b66SMauro Carvalho Chehab non-standard attribute(s). 137*7ebd8b66SMauro Carvalho Chehab Standard attributes are specified in Documentation/hwmon/sysfs-interface.rst. 138*7ebd8b66SMauro Carvalho Chehab 139*7ebd8b66SMauro Carvalho Chehab* When deciding which sysfs attributes to support, look at the chip's 140*7ebd8b66SMauro Carvalho Chehab capabilities. While we do not expect your driver to support everything the 141*7ebd8b66SMauro Carvalho Chehab chip may offer, it should at least support all limits and alarms. 142*7ebd8b66SMauro Carvalho Chehab 143*7ebd8b66SMauro Carvalho Chehab* Last but not least, please check if a driver for your chip already exists 144*7ebd8b66SMauro Carvalho Chehab before starting to write a new driver. Especially for temperature sensors, 145*7ebd8b66SMauro Carvalho Chehab new chips are often variants of previously released chips. In some cases, 146*7ebd8b66SMauro Carvalho Chehab a presumably new chip may simply have been relabeled. 147