<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-stable.git/drivers/hwmon, branch v4.19.4</title>
<subtitle>Linux kernel stable tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/'/>
<entry>
<title>hwmon: (core) Fix double-free in __hwmon_device_register()</title>
<updated>2018-11-21T08:19:19+00:00</updated>
<author>
<name>Dmitry Osipenko</name>
<email>digetx@gmail.com</email>
</author>
<published>2018-10-24T19:37:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=a63fffbd90f64d2e4981a440963a2c5aa0d77d83'/>
<id>a63fffbd90f64d2e4981a440963a2c5aa0d77d83</id>
<content type='text'>
commit 74e3512731bd5c9673176425a76a7cc5efa8ddb6 upstream.

Fix double-free that happens when thermal zone setup fails, see KASAN log
below.

==================================================================
BUG: KASAN: double-free or invalid-free in __hwmon_device_register+0x5dc/0xa7c

CPU: 0 PID: 132 Comm: kworker/0:2 Tainted: G    B             4.19.0-rc8-next-20181016-00042-gb52cd80401e9-dirty #41
Hardware name: NVIDIA Tegra SoC (Flattened Device Tree)
Workqueue: events deferred_probe_work_func
Backtrace:
[&lt;c0110540&gt;] (dump_backtrace) from [&lt;c0110944&gt;] (show_stack+0x20/0x24)
[&lt;c0110924&gt;] (show_stack) from [&lt;c105cb08&gt;] (dump_stack+0x9c/0xb0)
[&lt;c105ca6c&gt;] (dump_stack) from [&lt;c02fdaec&gt;] (print_address_description+0x68/0x250)
[&lt;c02fda84&gt;] (print_address_description) from [&lt;c02fd4ac&gt;] (kasan_report_invalid_free+0x68/0x88)
[&lt;c02fd444&gt;] (kasan_report_invalid_free) from [&lt;c02fc85c&gt;] (__kasan_slab_free+0x1f4/0x200)
[&lt;c02fc668&gt;] (__kasan_slab_free) from [&lt;c02fd0c0&gt;] (kasan_slab_free+0x14/0x18)
[&lt;c02fd0ac&gt;] (kasan_slab_free) from [&lt;c02f9c6c&gt;] (kfree+0x90/0x294)
[&lt;c02f9bdc&gt;] (kfree) from [&lt;c0b41bbc&gt;] (__hwmon_device_register+0x5dc/0xa7c)
[&lt;c0b415e0&gt;] (__hwmon_device_register) from [&lt;c0b421e8&gt;] (hwmon_device_register_with_info+0xa0/0xa8)
[&lt;c0b42148&gt;] (hwmon_device_register_with_info) from [&lt;c0b42324&gt;] (devm_hwmon_device_register_with_info+0x74/0xb4)
[&lt;c0b422b0&gt;] (devm_hwmon_device_register_with_info) from [&lt;c0b4481c&gt;] (lm90_probe+0x414/0x578)
[&lt;c0b44408&gt;] (lm90_probe) from [&lt;c0aeeff4&gt;] (i2c_device_probe+0x35c/0x384)
[&lt;c0aeec98&gt;] (i2c_device_probe) from [&lt;c08776cc&gt;] (really_probe+0x290/0x3e4)
[&lt;c087743c&gt;] (really_probe) from [&lt;c0877a2c&gt;] (driver_probe_device+0x80/0x1c4)
[&lt;c08779ac&gt;] (driver_probe_device) from [&lt;c0877da8&gt;] (__device_attach_driver+0x104/0x11c)
[&lt;c0877ca4&gt;] (__device_attach_driver) from [&lt;c0874dd8&gt;] (bus_for_each_drv+0xa4/0xc8)
[&lt;c0874d34&gt;] (bus_for_each_drv) from [&lt;c08773b0&gt;] (__device_attach+0xf0/0x15c)
[&lt;c08772c0&gt;] (__device_attach) from [&lt;c0877e24&gt;] (device_initial_probe+0x1c/0x20)
[&lt;c0877e08&gt;] (device_initial_probe) from [&lt;c08762f4&gt;] (bus_probe_device+0xdc/0xec)
[&lt;c0876218&gt;] (bus_probe_device) from [&lt;c0876a08&gt;] (deferred_probe_work_func+0xa8/0xd4)
[&lt;c0876960&gt;] (deferred_probe_work_func) from [&lt;c01527c4&gt;] (process_one_work+0x3dc/0x96c)
[&lt;c01523e8&gt;] (process_one_work) from [&lt;c01541e0&gt;] (worker_thread+0x4ec/0x8bc)
[&lt;c0153cf4&gt;] (worker_thread) from [&lt;c015b238&gt;] (kthread+0x230/0x240)
[&lt;c015b008&gt;] (kthread) from [&lt;c01010bc&gt;] (ret_from_fork+0x14/0x38)
Exception stack(0xcf743fb0 to 0xcf743ff8)
3fa0:                                     00000000 00000000 00000000 00000000
3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
3fe0: 00000000 00000000 00000000 00000000 00000013 00000000

Allocated by task 132:
 kasan_kmalloc.part.1+0x58/0xf4
 kasan_kmalloc+0x90/0xa4
 kmem_cache_alloc_trace+0x90/0x2a0
 __hwmon_device_register+0xbc/0xa7c
 hwmon_device_register_with_info+0xa0/0xa8
 devm_hwmon_device_register_with_info+0x74/0xb4
 lm90_probe+0x414/0x578
 i2c_device_probe+0x35c/0x384
 really_probe+0x290/0x3e4
 driver_probe_device+0x80/0x1c4
 __device_attach_driver+0x104/0x11c
 bus_for_each_drv+0xa4/0xc8
 __device_attach+0xf0/0x15c
 device_initial_probe+0x1c/0x20
 bus_probe_device+0xdc/0xec
 deferred_probe_work_func+0xa8/0xd4
 process_one_work+0x3dc/0x96c
 worker_thread+0x4ec/0x8bc
 kthread+0x230/0x240
 ret_from_fork+0x14/0x38
   (null)

Freed by task 132:
 __kasan_slab_free+0x12c/0x200
 kasan_slab_free+0x14/0x18
 kfree+0x90/0x294
 hwmon_dev_release+0x1c/0x20
 device_release+0x4c/0xe8
 kobject_put+0xac/0x11c
 device_unregister+0x2c/0x30
 __hwmon_device_register+0xa58/0xa7c
 hwmon_device_register_with_info+0xa0/0xa8
 devm_hwmon_device_register_with_info+0x74/0xb4
 lm90_probe+0x414/0x578
 i2c_device_probe+0x35c/0x384
 really_probe+0x290/0x3e4
 driver_probe_device+0x80/0x1c4
 __device_attach_driver+0x104/0x11c
 bus_for_each_drv+0xa4/0xc8
 __device_attach+0xf0/0x15c
 device_initial_probe+0x1c/0x20
 bus_probe_device+0xdc/0xec
 deferred_probe_work_func+0xa8/0xd4
 process_one_work+0x3dc/0x96c
 worker_thread+0x4ec/0x8bc
 kthread+0x230/0x240
 ret_from_fork+0x14/0x38
   (null)

Cc: &lt;stable@vger.kernel.org&gt; # v4.15+
Fixes: 47c332deb8e8 ("hwmon: Deal with errors from the thermal subsystem")
Signed-off-by: Dmitry Osipenko &lt;digetx@gmail.com&gt;
Signed-off-by: Guenter Roeck &lt;linux@roeck-us.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 74e3512731bd5c9673176425a76a7cc5efa8ddb6 upstream.

Fix double-free that happens when thermal zone setup fails, see KASAN log
below.

==================================================================
BUG: KASAN: double-free or invalid-free in __hwmon_device_register+0x5dc/0xa7c

CPU: 0 PID: 132 Comm: kworker/0:2 Tainted: G    B             4.19.0-rc8-next-20181016-00042-gb52cd80401e9-dirty #41
Hardware name: NVIDIA Tegra SoC (Flattened Device Tree)
Workqueue: events deferred_probe_work_func
Backtrace:
[&lt;c0110540&gt;] (dump_backtrace) from [&lt;c0110944&gt;] (show_stack+0x20/0x24)
[&lt;c0110924&gt;] (show_stack) from [&lt;c105cb08&gt;] (dump_stack+0x9c/0xb0)
[&lt;c105ca6c&gt;] (dump_stack) from [&lt;c02fdaec&gt;] (print_address_description+0x68/0x250)
[&lt;c02fda84&gt;] (print_address_description) from [&lt;c02fd4ac&gt;] (kasan_report_invalid_free+0x68/0x88)
[&lt;c02fd444&gt;] (kasan_report_invalid_free) from [&lt;c02fc85c&gt;] (__kasan_slab_free+0x1f4/0x200)
[&lt;c02fc668&gt;] (__kasan_slab_free) from [&lt;c02fd0c0&gt;] (kasan_slab_free+0x14/0x18)
[&lt;c02fd0ac&gt;] (kasan_slab_free) from [&lt;c02f9c6c&gt;] (kfree+0x90/0x294)
[&lt;c02f9bdc&gt;] (kfree) from [&lt;c0b41bbc&gt;] (__hwmon_device_register+0x5dc/0xa7c)
[&lt;c0b415e0&gt;] (__hwmon_device_register) from [&lt;c0b421e8&gt;] (hwmon_device_register_with_info+0xa0/0xa8)
[&lt;c0b42148&gt;] (hwmon_device_register_with_info) from [&lt;c0b42324&gt;] (devm_hwmon_device_register_with_info+0x74/0xb4)
[&lt;c0b422b0&gt;] (devm_hwmon_device_register_with_info) from [&lt;c0b4481c&gt;] (lm90_probe+0x414/0x578)
[&lt;c0b44408&gt;] (lm90_probe) from [&lt;c0aeeff4&gt;] (i2c_device_probe+0x35c/0x384)
[&lt;c0aeec98&gt;] (i2c_device_probe) from [&lt;c08776cc&gt;] (really_probe+0x290/0x3e4)
[&lt;c087743c&gt;] (really_probe) from [&lt;c0877a2c&gt;] (driver_probe_device+0x80/0x1c4)
[&lt;c08779ac&gt;] (driver_probe_device) from [&lt;c0877da8&gt;] (__device_attach_driver+0x104/0x11c)
[&lt;c0877ca4&gt;] (__device_attach_driver) from [&lt;c0874dd8&gt;] (bus_for_each_drv+0xa4/0xc8)
[&lt;c0874d34&gt;] (bus_for_each_drv) from [&lt;c08773b0&gt;] (__device_attach+0xf0/0x15c)
[&lt;c08772c0&gt;] (__device_attach) from [&lt;c0877e24&gt;] (device_initial_probe+0x1c/0x20)
[&lt;c0877e08&gt;] (device_initial_probe) from [&lt;c08762f4&gt;] (bus_probe_device+0xdc/0xec)
[&lt;c0876218&gt;] (bus_probe_device) from [&lt;c0876a08&gt;] (deferred_probe_work_func+0xa8/0xd4)
[&lt;c0876960&gt;] (deferred_probe_work_func) from [&lt;c01527c4&gt;] (process_one_work+0x3dc/0x96c)
[&lt;c01523e8&gt;] (process_one_work) from [&lt;c01541e0&gt;] (worker_thread+0x4ec/0x8bc)
[&lt;c0153cf4&gt;] (worker_thread) from [&lt;c015b238&gt;] (kthread+0x230/0x240)
[&lt;c015b008&gt;] (kthread) from [&lt;c01010bc&gt;] (ret_from_fork+0x14/0x38)
Exception stack(0xcf743fb0 to 0xcf743ff8)
3fa0:                                     00000000 00000000 00000000 00000000
3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
3fe0: 00000000 00000000 00000000 00000000 00000013 00000000

Allocated by task 132:
 kasan_kmalloc.part.1+0x58/0xf4
 kasan_kmalloc+0x90/0xa4
 kmem_cache_alloc_trace+0x90/0x2a0
 __hwmon_device_register+0xbc/0xa7c
 hwmon_device_register_with_info+0xa0/0xa8
 devm_hwmon_device_register_with_info+0x74/0xb4
 lm90_probe+0x414/0x578
 i2c_device_probe+0x35c/0x384
 really_probe+0x290/0x3e4
 driver_probe_device+0x80/0x1c4
 __device_attach_driver+0x104/0x11c
 bus_for_each_drv+0xa4/0xc8
 __device_attach+0xf0/0x15c
 device_initial_probe+0x1c/0x20
 bus_probe_device+0xdc/0xec
 deferred_probe_work_func+0xa8/0xd4
 process_one_work+0x3dc/0x96c
 worker_thread+0x4ec/0x8bc
 kthread+0x230/0x240
 ret_from_fork+0x14/0x38
   (null)

Freed by task 132:
 __kasan_slab_free+0x12c/0x200
 kasan_slab_free+0x14/0x18
 kfree+0x90/0x294
 hwmon_dev_release+0x1c/0x20
 device_release+0x4c/0xe8
 kobject_put+0xac/0x11c
 device_unregister+0x2c/0x30
 __hwmon_device_register+0xa58/0xa7c
 hwmon_device_register_with_info+0xa0/0xa8
 devm_hwmon_device_register_with_info+0x74/0xb4
 lm90_probe+0x414/0x578
 i2c_device_probe+0x35c/0x384
 really_probe+0x290/0x3e4
 driver_probe_device+0x80/0x1c4
 __device_attach_driver+0x104/0x11c
 bus_for_each_drv+0xa4/0xc8
 __device_attach+0xf0/0x15c
 device_initial_probe+0x1c/0x20
 bus_probe_device+0xdc/0xec
 deferred_probe_work_func+0xa8/0xd4
 process_one_work+0x3dc/0x96c
 worker_thread+0x4ec/0x8bc
 kthread+0x230/0x240
 ret_from_fork+0x14/0x38
   (null)

Cc: &lt;stable@vger.kernel.org&gt; # v4.15+
Fixes: 47c332deb8e8 ("hwmon: Deal with errors from the thermal subsystem")
Signed-off-by: Dmitry Osipenko &lt;digetx@gmail.com&gt;
Signed-off-by: Guenter Roeck &lt;linux@roeck-us.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>hwmon: (pwm-fan) Set fan speed to 0 on suspend</title>
<updated>2018-11-13T19:08:21+00:00</updated>
<author>
<name>Thierry Reding</name>
<email>treding@nvidia.com</email>
</author>
<published>2018-09-21T10:10:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=5764ffc8a643add918a977cee0e945d57bd0563d'/>
<id>5764ffc8a643add918a977cee0e945d57bd0563d</id>
<content type='text'>
[ Upstream commit 95dcd64bc5a27080beaa344edfe5bdcca3d2e7dc ]

Technically this is not required because disabling the PWM should be
enough. However, when support for atomic operations was implemented in
the PWM subsystem, only actual changes to the PWM channel are applied
during pwm_config(), which means that during after resume from suspend
the old settings won't be applied.

One possible solution is for the PWM driver to implement its own PM
operations such that settings from before suspend get applied on resume.
This has the disadvantage of completely ignoring any particular ordering
requirements that PWM user drivers might have, so it is best to leave it
up to the user drivers to apply the settings that they want at the
appropriate time.

Another way to solve this would be to read back the current state of the
PWM at the time of resume. That way, in case the configuration was lost
during suspend, applying the old settings in PWM user drivers would
actually get them applied because they differ from the current settings.
However, not all PWM drivers support reading the hardware state, and not
all hardware may support it.

The best workaround at this point seems to be to let PWM user drivers
tell the PWM subsystem that the PWM is turned off by, in addition to
disabling it, also setting the duty cycle to 0. This causes the resume
operation to apply a configuration that is different from the current
configuration, resulting in the proper state from before suspend getting
restored.

Signed-off-by: Thierry Reding &lt;treding@nvidia.com&gt;
Signed-off-by: Guenter Roeck &lt;linux@roeck-us.net&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit 95dcd64bc5a27080beaa344edfe5bdcca3d2e7dc ]

Technically this is not required because disabling the PWM should be
enough. However, when support for atomic operations was implemented in
the PWM subsystem, only actual changes to the PWM channel are applied
during pwm_config(), which means that during after resume from suspend
the old settings won't be applied.

One possible solution is for the PWM driver to implement its own PM
operations such that settings from before suspend get applied on resume.
This has the disadvantage of completely ignoring any particular ordering
requirements that PWM user drivers might have, so it is best to leave it
up to the user drivers to apply the settings that they want at the
appropriate time.

Another way to solve this would be to read back the current state of the
PWM at the time of resume. That way, in case the configuration was lost
during suspend, applying the old settings in PWM user drivers would
actually get them applied because they differ from the current settings.
However, not all PWM drivers support reading the hardware state, and not
all hardware may support it.

The best workaround at this point seems to be to let PWM user drivers
tell the PWM subsystem that the PWM is turned off by, in addition to
disabling it, also setting the duty cycle to 0. This causes the resume
operation to apply a configuration that is different from the current
configuration, resulting in the proper state from before suspend getting
restored.

Signed-off-by: Thierry Reding &lt;treding@nvidia.com&gt;
Signed-off-by: Guenter Roeck &lt;linux@roeck-us.net&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>hwmon: (pmbus) Fix page count auto-detection.</title>
<updated>2018-11-13T19:08:16+00:00</updated>
<author>
<name>Dmitry Bazhenov</name>
<email>bazhenov.dn@gmail.com</email>
</author>
<published>2018-10-15T09:21:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=43cba96d9505c5084db99531f28d4036698cfefe'/>
<id>43cba96d9505c5084db99531f28d4036698cfefe</id>
<content type='text'>
commit e7c6a55606b5c46b449d76588968b4d8caae903f upstream.

Devices with compatible="pmbus" field have zero initial page count,
and pmbus_clear_faults() being called before the page count auto-
detection does not actually clear faults because it depends on the
page count. Non-cleared faults in its turn may fail the subsequent
page count auto-detection.

This patch fixes this problem by calling pmbus_clear_fault_page()
for currently set page and calling pmbus_clear_faults() after the
page count was detected.

Cc: stable@vger.kernel.org
Signed-off-by: Dmitry Bazhenov &lt;bazhenov.dn@gmail.com&gt;
Signed-off-by: Guenter Roeck &lt;linux@roeck-us.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit e7c6a55606b5c46b449d76588968b4d8caae903f upstream.

Devices with compatible="pmbus" field have zero initial page count,
and pmbus_clear_faults() being called before the page count auto-
detection does not actually clear faults because it depends on the
page count. Non-cleared faults in its turn may fail the subsequent
page count auto-detection.

This patch fixes this problem by calling pmbus_clear_fault_page()
for currently set page and calling pmbus_clear_faults() after the
page count was detected.

Cc: stable@vger.kernel.org
Signed-off-by: Dmitry Bazhenov &lt;bazhenov.dn@gmail.com&gt;
Signed-off-by: Guenter Roeck &lt;linux@roeck-us.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>Merge tag 'alloc-args-v4.19-rc8' of https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux</title>
<updated>2018-10-11T17:10:30+00:00</updated>
<author>
<name>Greg Kroah-Hartman</name>
<email>gregkh@linuxfoundation.org</email>
</author>
<published>2018-10-11T17:10:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=834d3cd294abd9ad81c6cbaefdda28aa491ceb06'/>
<id>834d3cd294abd9ad81c6cbaefdda28aa491ceb06</id>
<content type='text'>
Kees writes:
  "Fix open-coded multiplication arguments to allocators

   - Fixes several new open-coded multiplications added in the 4.19
     merge window."

* tag 'alloc-args-v4.19-rc8' of https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
  treewide: Replace more open-coded allocation size multiplications
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Kees writes:
  "Fix open-coded multiplication arguments to allocators

   - Fixes several new open-coded multiplications added in the 4.19
     merge window."

* tag 'alloc-args-v4.19-rc8' of https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
  treewide: Replace more open-coded allocation size multiplications
</pre>
</div>
</content>
</entry>
<entry>
<title>treewide: Replace more open-coded allocation size multiplications</title>
<updated>2018-10-06T01:06:30+00:00</updated>
<author>
<name>Kees Cook</name>
<email>keescook@chromium.org</email>
</author>
<published>2018-10-05T23:21:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=329e09893909d409039f6a79757d9b80b67efe39'/>
<id>329e09893909d409039f6a79757d9b80b67efe39</id>
<content type='text'>
As done treewide earlier, this catches several more open-coded
allocation size calculations that were added to the kernel during the
merge window. This performs the following mechanical transformations
using Coccinelle:

	kvmalloc(a * b, ...) -&gt; kvmalloc_array(a, b, ...)
	kvzalloc(a * b, ...) -&gt; kvcalloc(a, b, ...)
	devm_kzalloc(..., a * b, ...) -&gt; devm_kcalloc(..., a, b, ...)

Signed-off-by: Kees Cook &lt;keescook@chromium.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
As done treewide earlier, this catches several more open-coded
allocation size calculations that were added to the kernel during the
merge window. This performs the following mechanical transformations
using Coccinelle:

	kvmalloc(a * b, ...) -&gt; kvmalloc_array(a, b, ...)
	kvzalloc(a * b, ...) -&gt; kvcalloc(a, b, ...)
	devm_kzalloc(..., a * b, ...) -&gt; devm_kcalloc(..., a, b, ...)

Signed-off-by: Kees Cook &lt;keescook@chromium.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge tag 'hwmon-for-linus-v4.19-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging</title>
<updated>2018-09-19T20:59:30+00:00</updated>
<author>
<name>Greg Kroah-Hartman</name>
<email>gregkh@linuxfoundation.org</email>
</author>
<published>2018-09-19T20:59:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=eb9a29f9e585044ec71e82d815298ad7e4908858'/>
<id>eb9a29f9e585044ec71e82d815298ad7e4908858</id>
<content type='text'>
Guenter writes:
   "Various bug fixes for nct6775 driver"
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Guenter writes:
   "Various bug fixes for nct6775 driver"
</pre>
</div>
</content>
</entry>
<entry>
<title>hwmon: (nct6775) Use different register to get fan RPM for fan7</title>
<updated>2018-09-17T12:38:50+00:00</updated>
<author>
<name>Guenter Roeck</name>
<email>linux@roeck-us.net</email>
</author>
<published>2018-09-17T12:23:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=55066354285b36ee09dc50e2527f43a97c567177'/>
<id>55066354285b36ee09dc50e2527f43a97c567177</id>
<content type='text'>
The documented register to retrieve the fan RPM for fan7 is found
to be unreliable at least with NCT6796D revision 3. Let's use
register 0x4ce instead. This is undocumented for NCT6796D, but
documented for NCT6797D and NCT6798D and known to be working.

Reported-by: Robert Kern &lt;ulteq@web.de&gt;
Cc: Robert Kern &lt;ulteq@web.de&gt;
Fixes: 81820059a428 ("hwmon: (nct6775) Add support for NCT6796D")
Signed-off-by: Guenter Roeck &lt;linux@roeck-us.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The documented register to retrieve the fan RPM for fan7 is found
to be unreliable at least with NCT6796D revision 3. Let's use
register 0x4ce instead. This is undocumented for NCT6796D, but
documented for NCT6797D and NCT6798D and known to be working.

Reported-by: Robert Kern &lt;ulteq@web.de&gt;
Cc: Robert Kern &lt;ulteq@web.de&gt;
Fixes: 81820059a428 ("hwmon: (nct6775) Add support for NCT6796D")
Signed-off-by: Guenter Roeck &lt;linux@roeck-us.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>hwmon: (nct6775) Fix RPM output for fan7 on NCT6796D</title>
<updated>2018-09-15T23:18:44+00:00</updated>
<author>
<name>Guenter Roeck</name>
<email>linux@roeck-us.net</email>
</author>
<published>2018-09-14T03:01:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=f6de298806d9cbc63a4907bca34a06162b9d7dce'/>
<id>f6de298806d9cbc63a4907bca34a06162b9d7dce</id>
<content type='text'>
fan7 on NCT6796D does not have a fan count register; it only has an RPM
register. Switch to using RPM registers to read the fan speed for all
chips supporting it to solve the problem for good.

Reported-by: Robert Kern &lt;ulteq@web.de&gt;
Cc: Robert Kern &lt;ulteq@web.de&gt;
Fixes: 81820059a428 ("hwmon: (nct6775) Add support for NCT6796D")
Signed-off-by: Guenter Roeck &lt;linux@roeck-us.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
fan7 on NCT6796D does not have a fan count register; it only has an RPM
register. Switch to using RPM registers to read the fan speed for all
chips supporting it to solve the problem for good.

Reported-by: Robert Kern &lt;ulteq@web.de&gt;
Cc: Robert Kern &lt;ulteq@web.de&gt;
Fixes: 81820059a428 ("hwmon: (nct6775) Add support for NCT6796D")
Signed-off-by: Guenter Roeck &lt;linux@roeck-us.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>hwmon: (nct6775) Fix virtual temperature sources for NCT6796D</title>
<updated>2018-09-15T14:42:07+00:00</updated>
<author>
<name>Guenter Roeck</name>
<email>linux@roeck-us.net</email>
</author>
<published>2018-09-14T02:43:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=37196ba4ae95a2077d78715eb12e879e57613d43'/>
<id>37196ba4ae95a2077d78715eb12e879e57613d43</id>
<content type='text'>
The following kernel log message is reported for the nct6775 driver
on ASUS WS X299 SAGE.

nct6775: Found NCT6796D or compatible chip at 0x2e:0x290
nct6775 nct6775.656: Invalid temperature source 11 at index 0,
			source register 0x100, temp register 0x73
nct6775 nct6775.656: Invalid temperature source 11 at index 2,
			source register 0x300, temp register 0x77
nct6775 nct6775.656: Invalid temperature source 11 at index 3,
			source register 0x800, temp register 0x79
nct6775 nct6775.656: Invalid temperature source 11 at index 4,
			source register 0x900, temp register 0x7b

A recent version of the datasheet lists temperature source 11 as reserved.
However, an older version of the datasheet lists temperature sources 10
and 11 as supported virtual temperature sources. Apparently the older
version of the datasheet is correct, so list those temperature sources
as supported.

Virtual temperature sources are different than other temperature sources:
Values are not read from a temperature sensor, but written either from
BIOS or an embedded controller. As such, each virtual temperature has to
be reported. Since there is now more than one temperature source, we have
to keep virtual temperature sources in a chip-specific mask and can no
longer rely on the assumption that there is only one virtual temperature
source with a fixed index. This accounts for most of the complexity of this
patch.

Reported-by: Robert Kern &lt;ulteq@web.de&gt;
Cc: Robert Kern &lt;ulteq@web.de&gt;
Fixes: 81820059a428 ("hwmon: (nct6775) Add support for NCT6796D")
Signed-off-by: Guenter Roeck &lt;linux@roeck-us.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The following kernel log message is reported for the nct6775 driver
on ASUS WS X299 SAGE.

nct6775: Found NCT6796D or compatible chip at 0x2e:0x290
nct6775 nct6775.656: Invalid temperature source 11 at index 0,
			source register 0x100, temp register 0x73
nct6775 nct6775.656: Invalid temperature source 11 at index 2,
			source register 0x300, temp register 0x77
nct6775 nct6775.656: Invalid temperature source 11 at index 3,
			source register 0x800, temp register 0x79
nct6775 nct6775.656: Invalid temperature source 11 at index 4,
			source register 0x900, temp register 0x7b

A recent version of the datasheet lists temperature source 11 as reserved.
However, an older version of the datasheet lists temperature sources 10
and 11 as supported virtual temperature sources. Apparently the older
version of the datasheet is correct, so list those temperature sources
as supported.

Virtual temperature sources are different than other temperature sources:
Values are not read from a temperature sensor, but written either from
BIOS or an embedded controller. As such, each virtual temperature has to
be reported. Since there is now more than one temperature source, we have
to keep virtual temperature sources in a chip-specific mask and can no
longer rely on the assumption that there is only one virtual temperature
source with a fixed index. This accounts for most of the complexity of this
patch.

Reported-by: Robert Kern &lt;ulteq@web.de&gt;
Cc: Robert Kern &lt;ulteq@web.de&gt;
Fixes: 81820059a428 ("hwmon: (nct6775) Add support for NCT6796D")
Signed-off-by: Guenter Roeck &lt;linux@roeck-us.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc</title>
<updated>2018-09-08T22:38:57+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2018-09-08T22:38:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=0f3aa48ad4c307fb72b8eb43add26c8f314d396a'/>
<id>0f3aa48ad4c307fb72b8eb43add26c8f314d396a</id>
<content type='text'>
Pull ARM SoC fixes from Olof Johansson:
 "A few more fixes who have trickled in:

   - MMC bus width fixup for some Allwinner platforms

   - Fix for NULL deref in ti-aemif when no platform data is passed in

   - Fix div by 0 in SCMI code

   - Add a missing module alias in a new RPi driver"

* tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
  memory: ti-aemif: fix a potential NULL-pointer dereference
  firmware: arm_scmi: fix divide by zero when sustained_perf_level is zero
  hwmon: rpi: add module alias to raspberrypi-hwmon
  arm64: allwinner: dts: h6: fix Pine H64 MMC bus width
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Pull ARM SoC fixes from Olof Johansson:
 "A few more fixes who have trickled in:

   - MMC bus width fixup for some Allwinner platforms

   - Fix for NULL deref in ti-aemif when no platform data is passed in

   - Fix div by 0 in SCMI code

   - Add a missing module alias in a new RPi driver"

* tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
  memory: ti-aemif: fix a potential NULL-pointer dereference
  firmware: arm_scmi: fix divide by zero when sustained_perf_level is zero
  hwmon: rpi: add module alias to raspberrypi-hwmon
  arm64: allwinner: dts: h6: fix Pine H64 MMC bus width
</pre>
</div>
</content>
</entry>
</feed>
