diff options
author | Dave Airlie <airlied@redhat.com> | 2016-09-27 21:17:26 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2016-09-27 21:17:26 -0400 |
commit | 662d5c957161802e2f26317bfe02108fdb215706 (patch) | |
tree | 36ff51fd391095f7d33adcedfeea779e68140e83 | |
parent | f01ebbdb46a845a756db7c3cd4cf9718d6d4b715 (diff) | |
parent | 7b993855dfd5d87e07ac84285d3d9bb0c743dede (diff) |
Merge tag 'tilcdc-4.9-3.1' of https://github.com/jsarha/linux into drm-next
Second attempt for 3rd drm/tilcdc pull request for v4.9.
* tag 'tilcdc-4.9-3.1' of https://github.com/jsarha/linux:
drm/tilcdc: fix wrong error handling
drm/tilcdc: Return directly after a failed kfree_table_init() in tilcdc_convert_slave_node()
drm/tilcdc: Remove "default" from blue-and-red-wiring property binding
drm/tilcdc: Fix non static symbol warning
drm/tilcdc: mark symbols static where possible
drm/tilcdc: add missing header dependencies
drm/tilcdc: WARN if CRTC is touched without CRTC lock
drm/tilcdc: Take CRTC lock when calling tilcdc_crtc_disable()
drm/tilcdc: Remove unnecessary tilcdc_crtc_disable() from tilcdc_unload()
drm/tilcdc: Flush flip-work workqueue before drm_flip_work_cleanup()
drm/tilcdc: Clean up LCDC functional clock rate setting code
drm/tilcdc: Take crtc modeset lock while updating the crtc clock rate
-rw-r--r-- | Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 91 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_drv.c | 22 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_drv.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_panel.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_slave_compat.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_tfp410.c | 1 |
7 files changed, 76 insertions, 54 deletions
diff --git a/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt b/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt index a5007aa437f3..a83abd79c55c 100644 --- a/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt +++ b/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt | |||
@@ -17,9 +17,9 @@ Optional properties: | |||
17 | the lcd controller. | 17 | the lcd controller. |
18 | - max-pixelclock: The maximum pixel clock that can be supported | 18 | - max-pixelclock: The maximum pixel clock that can be supported |
19 | by the lcd controller in KHz. | 19 | by the lcd controller in KHz. |
20 | - blue-and-red-wiring: Recognized values "default", "straight" or | 20 | - blue-and-red-wiring: Recognized values "straight" or "crossed". |
21 | "crossed". This property deals with the LCDC revision 2 (found on | 21 | This property deals with the LCDC revision 2 (found on AM335x) |
22 | AM335x) color errata [1]. | 22 | color errata [1]. |
23 | - "straight" indicates normal wiring that supports RGB565, | 23 | - "straight" indicates normal wiring that supports RGB565, |
24 | BGR888, and XBGR8888 color formats. | 24 | BGR888, and XBGR8888 color formats. |
25 | - "crossed" indicates wiring that has blue and red wires | 25 | - "crossed" indicates wiring that has blue and red wires |
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c index cb9df104fe5b..52ebe8fc1784 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <drm/drm_crtc.h> | 20 | #include <drm/drm_crtc.h> |
21 | #include <drm/drm_flip_work.h> | 21 | #include <drm/drm_flip_work.h> |
22 | #include <drm/drm_plane_helper.h> | 22 | #include <drm/drm_plane_helper.h> |
23 | #include <linux/workqueue.h> | ||
23 | 24 | ||
24 | #include "tilcdc_drv.h" | 25 | #include "tilcdc_drv.h" |
25 | #include "tilcdc_regs.h" | 26 | #include "tilcdc_regs.h" |
@@ -37,6 +38,8 @@ struct tilcdc_crtc { | |||
37 | bool frame_done; | 38 | bool frame_done; |
38 | spinlock_t irq_lock; | 39 | spinlock_t irq_lock; |
39 | 40 | ||
41 | unsigned int lcd_fck_rate; | ||
42 | |||
40 | ktime_t last_vblank; | 43 | ktime_t last_vblank; |
41 | 44 | ||
42 | struct drm_framebuffer *curr_fb; | 45 | struct drm_framebuffer *curr_fb; |
@@ -152,6 +155,8 @@ static void tilcdc_crtc_enable(struct drm_crtc *crtc) | |||
152 | struct drm_device *dev = crtc->dev; | 155 | struct drm_device *dev = crtc->dev; |
153 | struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); | 156 | struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); |
154 | 157 | ||
158 | WARN_ON(!drm_modeset_is_locked(&crtc->mutex)); | ||
159 | |||
155 | if (tilcdc_crtc->enabled) | 160 | if (tilcdc_crtc->enabled) |
156 | return; | 161 | return; |
157 | 162 | ||
@@ -176,6 +181,8 @@ void tilcdc_crtc_disable(struct drm_crtc *crtc) | |||
176 | struct drm_device *dev = crtc->dev; | 181 | struct drm_device *dev = crtc->dev; |
177 | struct tilcdc_drm_private *priv = dev->dev_private; | 182 | struct tilcdc_drm_private *priv = dev->dev_private; |
178 | 183 | ||
184 | WARN_ON(!drm_modeset_is_locked(&crtc->mutex)); | ||
185 | |||
179 | if (!tilcdc_crtc->enabled) | 186 | if (!tilcdc_crtc->enabled) |
180 | return; | 187 | return; |
181 | 188 | ||
@@ -227,8 +234,13 @@ static bool tilcdc_crtc_is_on(struct drm_crtc *crtc) | |||
227 | static void tilcdc_crtc_destroy(struct drm_crtc *crtc) | 234 | static void tilcdc_crtc_destroy(struct drm_crtc *crtc) |
228 | { | 235 | { |
229 | struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); | 236 | struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); |
237 | struct tilcdc_drm_private *priv = crtc->dev->dev_private; | ||
230 | 238 | ||
239 | drm_modeset_lock_crtc(crtc, NULL); | ||
231 | tilcdc_crtc_disable(crtc); | 240 | tilcdc_crtc_disable(crtc); |
241 | drm_modeset_unlock_crtc(crtc); | ||
242 | |||
243 | flush_workqueue(priv->wq); | ||
232 | 244 | ||
233 | of_node_put(crtc->port); | 245 | of_node_put(crtc->port); |
234 | drm_crtc_cleanup(crtc); | 246 | drm_crtc_cleanup(crtc); |
@@ -243,6 +255,8 @@ int tilcdc_crtc_update_fb(struct drm_crtc *crtc, | |||
243 | struct drm_device *dev = crtc->dev; | 255 | struct drm_device *dev = crtc->dev; |
244 | unsigned long flags; | 256 | unsigned long flags; |
245 | 257 | ||
258 | WARN_ON(!drm_modeset_is_locked(&crtc->mutex)); | ||
259 | |||
246 | if (tilcdc_crtc->event) { | 260 | if (tilcdc_crtc->event) { |
247 | dev_err(dev->dev, "already pending page flip!\n"); | 261 | dev_err(dev->dev, "already pending page flip!\n"); |
248 | return -EBUSY; | 262 | return -EBUSY; |
@@ -306,6 +320,37 @@ static bool tilcdc_crtc_mode_fixup(struct drm_crtc *crtc, | |||
306 | return true; | 320 | return true; |
307 | } | 321 | } |
308 | 322 | ||
323 | static void tilcdc_crtc_set_clk(struct drm_crtc *crtc) | ||
324 | { | ||
325 | struct drm_device *dev = crtc->dev; | ||
326 | struct tilcdc_drm_private *priv = dev->dev_private; | ||
327 | struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); | ||
328 | const unsigned clkdiv = 2; /* using a fixed divider of 2 */ | ||
329 | int ret; | ||
330 | |||
331 | /* mode.clock is in KHz, set_rate wants parameter in Hz */ | ||
332 | ret = clk_set_rate(priv->clk, crtc->mode.clock * 1000 * clkdiv); | ||
333 | if (ret < 0) { | ||
334 | dev_err(dev->dev, "failed to set display clock rate to: %d\n", | ||
335 | crtc->mode.clock); | ||
336 | return; | ||
337 | } | ||
338 | |||
339 | tilcdc_crtc->lcd_fck_rate = clk_get_rate(priv->clk); | ||
340 | |||
341 | DBG("lcd_clk=%u, mode clock=%d, div=%u", | ||
342 | tilcdc_crtc->lcd_fck_rate, crtc->mode.clock, clkdiv); | ||
343 | |||
344 | /* Configure the LCD clock divisor. */ | ||
345 | tilcdc_write(dev, LCDC_CTRL_REG, LCDC_CLK_DIVISOR(clkdiv) | | ||
346 | LCDC_RASTER_MODE); | ||
347 | |||
348 | if (priv->rev == 2) | ||
349 | tilcdc_set(dev, LCDC_CLK_ENABLE_REG, | ||
350 | LCDC_V2_DMA_CLK_EN | LCDC_V2_LIDD_CLK_EN | | ||
351 | LCDC_V2_CORE_CLK_EN); | ||
352 | } | ||
353 | |||
309 | static void tilcdc_crtc_mode_set_nofb(struct drm_crtc *crtc) | 354 | static void tilcdc_crtc_mode_set_nofb(struct drm_crtc *crtc) |
310 | { | 355 | { |
311 | struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); | 356 | struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); |
@@ -316,6 +361,8 @@ static void tilcdc_crtc_mode_set_nofb(struct drm_crtc *crtc) | |||
316 | struct drm_display_mode *mode = &crtc->state->adjusted_mode; | 361 | struct drm_display_mode *mode = &crtc->state->adjusted_mode; |
317 | struct drm_framebuffer *fb = crtc->primary->state->fb; | 362 | struct drm_framebuffer *fb = crtc->primary->state->fb; |
318 | 363 | ||
364 | WARN_ON(!drm_modeset_is_locked(&crtc->mutex)); | ||
365 | |||
319 | if (WARN_ON(!info)) | 366 | if (WARN_ON(!info)) |
320 | return; | 367 | return; |
321 | 368 | ||
@@ -468,7 +515,7 @@ static void tilcdc_crtc_mode_set_nofb(struct drm_crtc *crtc) | |||
468 | 515 | ||
469 | set_scanout(crtc, fb); | 516 | set_scanout(crtc, fb); |
470 | 517 | ||
471 | tilcdc_crtc_update_clk(crtc); | 518 | tilcdc_crtc_set_clk(crtc); |
472 | 519 | ||
473 | crtc->hwmode = crtc->state->adjusted_mode; | 520 | crtc->hwmode = crtc->state->adjusted_mode; |
474 | } | 521 | } |
@@ -637,41 +684,21 @@ void tilcdc_crtc_update_clk(struct drm_crtc *crtc) | |||
637 | { | 684 | { |
638 | struct drm_device *dev = crtc->dev; | 685 | struct drm_device *dev = crtc->dev; |
639 | struct tilcdc_drm_private *priv = dev->dev_private; | 686 | struct tilcdc_drm_private *priv = dev->dev_private; |
640 | unsigned long lcd_clk; | 687 | struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); |
641 | const unsigned clkdiv = 2; /* using a fixed divider of 2 */ | ||
642 | int ret; | ||
643 | 688 | ||
644 | pm_runtime_get_sync(dev->dev); | 689 | drm_modeset_lock_crtc(crtc, NULL); |
690 | if (tilcdc_crtc->lcd_fck_rate != clk_get_rate(priv->clk)) { | ||
691 | if (tilcdc_crtc_is_on(crtc)) { | ||
692 | pm_runtime_get_sync(dev->dev); | ||
693 | tilcdc_crtc_disable(crtc); | ||
645 | 694 | ||
646 | tilcdc_crtc_disable(crtc); | 695 | tilcdc_crtc_set_clk(crtc); |
647 | 696 | ||
648 | /* mode.clock is in KHz, set_rate wants parameter in Hz */ | 697 | tilcdc_crtc_enable(crtc); |
649 | ret = clk_set_rate(priv->clk, crtc->mode.clock * 1000 * clkdiv); | 698 | pm_runtime_put_sync(dev->dev); |
650 | if (ret < 0) { | 699 | } |
651 | dev_err(dev->dev, "failed to set display clock rate to: %d\n", | ||
652 | crtc->mode.clock); | ||
653 | goto out; | ||
654 | } | 700 | } |
655 | 701 | drm_modeset_unlock_crtc(crtc); | |
656 | lcd_clk = clk_get_rate(priv->clk); | ||
657 | |||
658 | DBG("lcd_clk=%lu, mode clock=%d, div=%u", | ||
659 | lcd_clk, crtc->mode.clock, clkdiv); | ||
660 | |||
661 | /* Configure the LCD clock divisor. */ | ||
662 | tilcdc_write(dev, LCDC_CTRL_REG, LCDC_CLK_DIVISOR(clkdiv) | | ||
663 | LCDC_RASTER_MODE); | ||
664 | |||
665 | if (priv->rev == 2) | ||
666 | tilcdc_set(dev, LCDC_CLK_ENABLE_REG, | ||
667 | LCDC_V2_DMA_CLK_EN | LCDC_V2_LIDD_CLK_EN | | ||
668 | LCDC_V2_CORE_CLK_EN); | ||
669 | |||
670 | if (tilcdc_crtc_is_on(crtc)) | ||
671 | tilcdc_crtc_enable(crtc); | ||
672 | |||
673 | out: | ||
674 | pm_runtime_put_sync(dev->dev); | ||
675 | } | 702 | } |
676 | 703 | ||
677 | #define SYNC_LOST_COUNT_LIMIT 50 | 704 | #define SYNC_LOST_COUNT_LIMIT 50 |
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c index f8892e9ad169..a694977c32f4 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c | |||
@@ -75,8 +75,8 @@ static void tilcdc_fb_output_poll_changed(struct drm_device *dev) | |||
75 | drm_fbdev_cma_hotplug_event(priv->fbdev); | 75 | drm_fbdev_cma_hotplug_event(priv->fbdev); |
76 | } | 76 | } |
77 | 77 | ||
78 | int tilcdc_atomic_check(struct drm_device *dev, | 78 | static int tilcdc_atomic_check(struct drm_device *dev, |
79 | struct drm_atomic_state *state) | 79 | struct drm_atomic_state *state) |
80 | { | 80 | { |
81 | int ret; | 81 | int ret; |
82 | 82 | ||
@@ -184,12 +184,9 @@ static int cpufreq_transition(struct notifier_block *nb, | |||
184 | { | 184 | { |
185 | struct tilcdc_drm_private *priv = container_of(nb, | 185 | struct tilcdc_drm_private *priv = container_of(nb, |
186 | struct tilcdc_drm_private, freq_transition); | 186 | struct tilcdc_drm_private, freq_transition); |
187 | if (val == CPUFREQ_POSTCHANGE) { | 187 | |
188 | if (priv->lcd_fck_rate != clk_get_rate(priv->clk)) { | 188 | if (val == CPUFREQ_POSTCHANGE) |
189 | priv->lcd_fck_rate = clk_get_rate(priv->clk); | 189 | tilcdc_crtc_update_clk(priv->crtc); |
190 | tilcdc_crtc_update_clk(priv->crtc); | ||
191 | } | ||
192 | } | ||
193 | 190 | ||
194 | return 0; | 191 | return 0; |
195 | } | 192 | } |
@@ -203,8 +200,6 @@ static int tilcdc_unload(struct drm_device *dev) | |||
203 | { | 200 | { |
204 | struct tilcdc_drm_private *priv = dev->dev_private; | 201 | struct tilcdc_drm_private *priv = dev->dev_private; |
205 | 202 | ||
206 | tilcdc_crtc_disable(priv->crtc); | ||
207 | |||
208 | tilcdc_remove_external_encoders(dev); | 203 | tilcdc_remove_external_encoders(dev); |
209 | 204 | ||
210 | drm_fbdev_cma_fini(priv->fbdev); | 205 | drm_fbdev_cma_fini(priv->fbdev); |
@@ -283,7 +278,6 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags) | |||
283 | } | 278 | } |
284 | 279 | ||
285 | #ifdef CONFIG_CPU_FREQ | 280 | #ifdef CONFIG_CPU_FREQ |
286 | priv->lcd_fck_rate = clk_get_rate(priv->clk); | ||
287 | priv->freq_transition.notifier_call = cpufreq_transition; | 281 | priv->freq_transition.notifier_call = cpufreq_transition; |
288 | ret = cpufreq_register_notifier(&priv->freq_transition, | 282 | ret = cpufreq_register_notifier(&priv->freq_transition, |
289 | CPUFREQ_TRANSITION_NOTIFIER); | 283 | CPUFREQ_TRANSITION_NOTIFIER); |
@@ -418,13 +412,13 @@ fail_irq_uninstall: | |||
418 | fail_vblank_cleanup: | 412 | fail_vblank_cleanup: |
419 | drm_vblank_cleanup(dev); | 413 | drm_vblank_cleanup(dev); |
420 | 414 | ||
421 | fail_mode_config_cleanup: | ||
422 | drm_mode_config_cleanup(dev); | ||
423 | |||
424 | fail_component_cleanup: | 415 | fail_component_cleanup: |
425 | if (priv->is_componentized) | 416 | if (priv->is_componentized) |
426 | component_unbind_all(dev->dev, dev); | 417 | component_unbind_all(dev->dev, dev); |
427 | 418 | ||
419 | fail_mode_config_cleanup: | ||
420 | drm_mode_config_cleanup(dev); | ||
421 | |||
428 | fail_external_cleanup: | 422 | fail_external_cleanup: |
429 | tilcdc_remove_external_encoders(dev); | 423 | tilcdc_remove_external_encoders(dev); |
430 | 424 | ||
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.h b/drivers/gpu/drm/tilcdc/tilcdc_drv.h index a6e5e6d4970c..9780c37ec4cd 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.h +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.h | |||
@@ -74,7 +74,6 @@ struct tilcdc_drm_private { | |||
74 | 74 | ||
75 | #ifdef CONFIG_CPU_FREQ | 75 | #ifdef CONFIG_CPU_FREQ |
76 | struct notifier_block freq_transition; | 76 | struct notifier_block freq_transition; |
77 | unsigned int lcd_fck_rate; | ||
78 | #endif | 77 | #endif |
79 | 78 | ||
80 | struct workqueue_struct *wq; | 79 | struct workqueue_struct *wq; |
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_panel.c b/drivers/gpu/drm/tilcdc/tilcdc_panel.c index 7b3650901930..2134bb20fbe9 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_panel.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_panel.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <drm/drm_atomic_helper.h> | 25 | #include <drm/drm_atomic_helper.h> |
26 | 26 | ||
27 | #include "tilcdc_drv.h" | 27 | #include "tilcdc_drv.h" |
28 | #include "tilcdc_panel.h" | ||
28 | 29 | ||
29 | struct panel_module { | 30 | struct panel_module { |
30 | struct tilcdc_module base; | 31 | struct tilcdc_module base; |
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_slave_compat.c b/drivers/gpu/drm/tilcdc/tilcdc_slave_compat.c index f9c79dabce20..623a9140493c 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_slave_compat.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_slave_compat.c | |||
@@ -139,7 +139,7 @@ static void __init tilcdc_node_disable(struct device_node *node) | |||
139 | of_update_property(node, prop); | 139 | of_update_property(node, prop); |
140 | } | 140 | } |
141 | 141 | ||
142 | struct device_node * __init tilcdc_get_overlay(struct kfree_table *kft) | 142 | static struct device_node * __init tilcdc_get_overlay(struct kfree_table *kft) |
143 | { | 143 | { |
144 | const int size = __dtb_tilcdc_slave_compat_end - | 144 | const int size = __dtb_tilcdc_slave_compat_end - |
145 | __dtb_tilcdc_slave_compat_begin; | 145 | __dtb_tilcdc_slave_compat_begin; |
@@ -195,7 +195,7 @@ static const char * const tilcdc_slave_props[] __initconst = { | |||
195 | NULL | 195 | NULL |
196 | }; | 196 | }; |
197 | 197 | ||
198 | void __init tilcdc_convert_slave_node(void) | 198 | static void __init tilcdc_convert_slave_node(void) |
199 | { | 199 | { |
200 | struct device_node *slave = NULL, *lcdc = NULL; | 200 | struct device_node *slave = NULL, *lcdc = NULL; |
201 | struct device_node *i2c = NULL, *fragment = NULL; | 201 | struct device_node *i2c = NULL, *fragment = NULL; |
@@ -207,7 +207,7 @@ void __init tilcdc_convert_slave_node(void) | |||
207 | int ret; | 207 | int ret; |
208 | 208 | ||
209 | if (kfree_table_init(&kft)) | 209 | if (kfree_table_init(&kft)) |
210 | goto out; | 210 | return; |
211 | 211 | ||
212 | lcdc = of_find_matching_node(NULL, tilcdc_of_match); | 212 | lcdc = of_find_matching_node(NULL, tilcdc_of_match); |
213 | slave = of_find_matching_node(NULL, tilcdc_slave_of_match); | 213 | slave = of_find_matching_node(NULL, tilcdc_slave_of_match); |
@@ -261,7 +261,7 @@ out: | |||
261 | of_node_put(fragment); | 261 | of_node_put(fragment); |
262 | } | 262 | } |
263 | 263 | ||
264 | int __init tilcdc_slave_compat_init(void) | 264 | static int __init tilcdc_slave_compat_init(void) |
265 | { | 265 | { |
266 | tilcdc_convert_slave_node(); | 266 | tilcdc_convert_slave_node(); |
267 | return 0; | 267 | return 0; |
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c b/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c index c6a70da6473d..458043a53995 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <drm/drm_atomic_helper.h> | 23 | #include <drm/drm_atomic_helper.h> |
24 | 24 | ||
25 | #include "tilcdc_drv.h" | 25 | #include "tilcdc_drv.h" |
26 | #include "tilcdc_tfp410.h" | ||
26 | 27 | ||
27 | struct tfp410_module { | 28 | struct tfp410_module { |
28 | struct tilcdc_module base; | 29 | struct tilcdc_module base; |