xref: /openbmc/linux/Documentation/hwmon/submitting-patches.rst (revision 7ebd8b66dd9e5a0b65e5ee5e2b8e7ca382ec97b7)
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