linux/drivers/pwm
Thierry Reding d2048c4915 pwm: atmel-hlcdc: Depend on HAVE_CLK
The include/linux/clk.h header defines dummy implementations for the
various clk_*() functions if HAVE_CLK is not selected to improve build
coverage in randconfig builds.

The dummy implementation of clk_get_rate() returns 0, which causes the
Atmel HLCDC PWM driver's atmel_hlcdc_pwm_config() implementation to end
up calling:

	do_div(clk_period_ns, 0)

On x86, do_div(n, base) will end up evaluating to this:

	n >>= ilog2(base)

with base = 0, the implementation of ilog2() will call ____ilog2_NaN(),
which is purposely undefined and results in a linker failure:

	ERROR: "____ilog2_NaN" [drivers/pwm/pwm-atmel-hlcdc.ko] undefined!

The implementation of do_div() checks that base is a power of 2 before
calling ilog2(). The compiler doesn't optimize this away, presumably
because is_power_of_2() is an inline function and the compiler doesn't
or can't inspect it closely enough. ilog2() being a macro it still ends
up generating the ____ilog2_NaN() because of the constant 0.

The root of the problem is that the driver really should be checking
before possibly dividing by zero. That should eventually be fixed, but
for now just assume that the clock runs at a sensible frequency when
available.

Reported-by: Jim Davis <jim.epost@gmail.com>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
2015-01-30 12:15:58 +01:00
..
core.c pwm: Fix uninitialized warnings in pwm_get() 2014-08-29 10:18:19 +02:00
Kconfig pwm: atmel-hlcdc: Depend on HAVE_CLK 2015-01-30 12:15:58 +01:00
Makefile pwm: add support for atmel-hlcdc-pwm device 2014-11-17 12:20:17 +01:00
pwm-ab8500.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-atmel-hlcdc.c pwm: atmel-hlcdc: add at91sam9x5 and sama5d3 errata handling 2014-12-04 11:32:36 +01:00
pwm-atmel-tcb.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-atmel.c pwm: atmel: Fix calculation of prescale value 2014-09-25 08:52:39 +02:00
pwm-bcm2835.c pwm: Add BCM2835 PWM driver 2014-11-17 12:20:13 +01:00
pwm-bcm-kona.c pwm: kona: Introduce Kona PWM controller support 2014-04-28 13:07:44 +02:00
pwm-bfin.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-clps711x.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-ep93xx.c pwm: ep93xx: split module author names 2013-12-20 10:53:50 +01:00
pwm-fsl-ftm.c pwm: ftm: Add Power Management support for FTM PWM 2014-12-01 10:48:54 +01:00
pwm-imx.c Merge branch 'platform/remove_owner' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux into driver-core-next 2014-11-03 19:53:56 -08:00
pwm-jz4740.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-lp3943.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-lpc32xx.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-lpss-pci.c pwm: lpss: pci: Move to use pcim_enable_device() 2014-08-23 00:25:51 +02:00
pwm-lpss-platform.c pwm: lpss: Properly split driver to parts 2014-08-23 00:25:47 +02:00
pwm-lpss.c pwm: lpss: use c99 initializers in structures 2014-08-25 11:45:34 +02:00
pwm-lpss.h pwm: lpss: Properly split driver to parts 2014-08-23 00:25:47 +02:00
pwm-mxs.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-pca9685.c pwm: pca9685: Fix wrong argument to set MODE1_SLEEP bit 2013-06-26 23:23:54 +02:00
pwm-puv3.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-pxa.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-renesas-tpu.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-rockchip.c pwm: rockchip: Allow polarity invert on rk3288 2014-08-26 10:44:08 +02:00
pwm-samsung.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-spear.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-sti.c pwm: sti: Remove PWM period table 2014-08-08 13:12:46 +02:00
pwm-tegra.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-tiecap.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-tiehrpwm.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-tipwmss.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
pwm-tipwmss.h pwm: davinci: Add Kconfig support for ECAP & EHRPWM devices 2013-03-22 11:35:20 +01:00
pwm-twl-led.c pwm: twl-led: Include linux/of.h header 2013-10-08 15:45:44 +02:00
pwm-twl.c pwm: twl: Really disable twl6030 PWMs 2014-05-08 23:41:47 +02:00
pwm-vt8500.c pwm: drop owner assignment from platform_drivers 2014-10-20 16:21:28 +02:00
sysfs.c pwm: sysfs: Convert to use ATTRIBUTE_GROUPS macro 2013-12-04 11:35:28 +01:00