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 /drivers/gpu/drm/tilcdc | |
| 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
Diffstat (limited to 'drivers/gpu/drm/tilcdc')
| -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 |
6 files changed, 73 insertions, 51 deletions
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; |
