]> Pileus Git - ~andy/linux/commit
drm/omap: fix (un)registering irqs inside an irq handler
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 24 Oct 2013 06:50:50 +0000 (09:50 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 9 Jan 2014 13:15:24 +0000 (15:15 +0200)
commit6da9f89172b94411896130c6e1acf159da3dc760
treefb656b3cd9cdb5973f6891ccde3be5fb4fcb739a
parent802eee95bde72fd0cd0f3a5b2098375a487d1eda
drm/omap: fix (un)registering irqs inside an irq handler

omapdrm (un)registers irqs inside an irq handler. The problem is that
the (un)register function uses dispc_runtime_get/put() to enable the
clocks, and those functions are not irq safe by default.

This was kind of fixed in 48664b21aeeffb40c5fa06843f18052e2c4ec9ef
(OMAPDSS: DISPC: set irq_safe for runtime PM), which makes dispc's
runtime calls irq-safe.

However, using pm_runtime_irq_safe in dispc makes the parent of dispc,
dss, always enabled, effectively preventing PM for the whole DSS module.

This patch makes omapdrm behave better by adding new irq (un)register
functions that do not use dispc_runtime_get/put, and using those
functions in interrupt context. Thus we can make dispc again
non-irq-safe, allowing proper PM.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: Rob Clark <robdclark@gmail.com>
drivers/gpu/drm/omapdrm/omap_crtc.c
drivers/gpu/drm/omapdrm/omap_drv.h
drivers/gpu/drm/omapdrm/omap_irq.c
drivers/video/omap2/dss/dispc.c