| .. | .. |
|---|
| 8 | 8 | |
|---|
| 9 | 9 | #include <linux/clk.h> |
|---|
| 10 | 10 | #include <linux/component.h> |
|---|
| 11 | +#include <linux/io.h> |
|---|
| 11 | 12 | #include <linux/module.h> |
|---|
| 12 | 13 | #include <linux/of_platform.h> |
|---|
| 13 | 14 | #include <linux/platform_device.h> |
|---|
| 14 | 15 | #include <linux/reset.h> |
|---|
| 15 | 16 | #include <linux/seq_file.h> |
|---|
| 16 | 17 | |
|---|
| 17 | | -#include <drm/drmP.h> |
|---|
| 18 | | -#include <drm/drm_crtc_helper.h> |
|---|
| 18 | +#include <drm/drm_atomic_helper.h> |
|---|
| 19 | +#include <drm/drm_debugfs.h> |
|---|
| 20 | +#include <drm/drm_device.h> |
|---|
| 21 | +#include <drm/drm_file.h> |
|---|
| 22 | +#include <drm/drm_print.h> |
|---|
| 19 | 23 | |
|---|
| 20 | 24 | #include "sti_crtc.h" |
|---|
| 21 | 25 | #include "sti_drv.h" |
|---|
| .. | .. |
|---|
| 153 | 157 | * |
|---|
| 154 | 158 | * @tvout: tvout structure |
|---|
| 155 | 159 | * @reg: register to set |
|---|
| 156 | | - * @cr_r: |
|---|
| 157 | | - * @y_g: |
|---|
| 158 | | - * @cb_b: |
|---|
| 160 | + * @cr_r: red chroma or red order |
|---|
| 161 | + * @y_g: y or green order |
|---|
| 162 | + * @cb_b: blue chroma or blue order |
|---|
| 159 | 163 | */ |
|---|
| 160 | 164 | static void tvout_vip_set_color_order(struct sti_tvout *tvout, int reg, |
|---|
| 161 | 165 | u32 cr_r, u32 y_g, u32 cb_b) |
|---|
| .. | .. |
|---|
| 210 | 214 | * @tvout: tvout structure |
|---|
| 211 | 215 | * @reg: register to set |
|---|
| 212 | 216 | * @main_path: main or auxiliary path |
|---|
| 213 | | - * @sel_input: selected_input (main/aux + conv) |
|---|
| 217 | + * @video_out: selected_input (main/aux + conv) |
|---|
| 214 | 218 | */ |
|---|
| 215 | 219 | static void tvout_vip_set_sel_input(struct sti_tvout *tvout, |
|---|
| 216 | 220 | int reg, |
|---|
| .. | .. |
|---|
| 247 | 251 | * |
|---|
| 248 | 252 | * @tvout: tvout structure |
|---|
| 249 | 253 | * @reg: register to set |
|---|
| 250 | | - * @in_vid_signed: used video input format |
|---|
| 254 | + * @in_vid_fmt: used video input format |
|---|
| 251 | 255 | */ |
|---|
| 252 | 256 | static void tvout_vip_set_in_vid_fmt(struct sti_tvout *tvout, |
|---|
| 253 | 257 | int reg, u32 in_vid_fmt) |
|---|
| .. | .. |
|---|
| 566 | 570 | { "tvout", tvout_dbg_show, 0, NULL }, |
|---|
| 567 | 571 | }; |
|---|
| 568 | 572 | |
|---|
| 569 | | -static int tvout_debugfs_init(struct sti_tvout *tvout, struct drm_minor *minor) |
|---|
| 573 | +static void tvout_debugfs_init(struct sti_tvout *tvout, struct drm_minor *minor) |
|---|
| 570 | 574 | { |
|---|
| 571 | 575 | unsigned int i; |
|---|
| 572 | 576 | |
|---|
| 573 | 577 | for (i = 0; i < ARRAY_SIZE(tvout_debugfs_files); i++) |
|---|
| 574 | 578 | tvout_debugfs_files[i].data = tvout; |
|---|
| 575 | 579 | |
|---|
| 576 | | - return drm_debugfs_create_files(tvout_debugfs_files, |
|---|
| 577 | | - ARRAY_SIZE(tvout_debugfs_files), |
|---|
| 578 | | - minor->debugfs_root, minor); |
|---|
| 580 | + drm_debugfs_create_files(tvout_debugfs_files, |
|---|
| 581 | + ARRAY_SIZE(tvout_debugfs_files), |
|---|
| 582 | + minor->debugfs_root, minor); |
|---|
| 579 | 583 | } |
|---|
| 580 | 584 | |
|---|
| 581 | 585 | static void sti_tvout_encoder_dpms(struct drm_encoder *encoder, int mode) |
|---|
| .. | .. |
|---|
| 599 | 603 | static int sti_tvout_late_register(struct drm_encoder *encoder) |
|---|
| 600 | 604 | { |
|---|
| 601 | 605 | struct sti_tvout *tvout = to_sti_tvout(encoder); |
|---|
| 602 | | - int ret; |
|---|
| 603 | 606 | |
|---|
| 604 | 607 | if (tvout->debugfs_registered) |
|---|
| 605 | 608 | return 0; |
|---|
| 606 | 609 | |
|---|
| 607 | | - ret = tvout_debugfs_init(tvout, encoder->dev->primary); |
|---|
| 608 | | - if (ret) |
|---|
| 609 | | - return ret; |
|---|
| 610 | + tvout_debugfs_init(tvout, encoder->dev->primary); |
|---|
| 610 | 611 | |
|---|
| 611 | 612 | tvout->debugfs_registered = true; |
|---|
| 612 | 613 | return 0; |
|---|
| .. | .. |
|---|
| 665 | 666 | |
|---|
| 666 | 667 | encoder->tvout = tvout; |
|---|
| 667 | 668 | |
|---|
| 668 | | - drm_encoder = (struct drm_encoder *)encoder; |
|---|
| 669 | + drm_encoder = &encoder->encoder; |
|---|
| 669 | 670 | |
|---|
| 670 | 671 | drm_encoder->possible_crtcs = ENCODER_CRTC_MASK; |
|---|
| 671 | | - drm_encoder->possible_clones = 1 << 0; |
|---|
| 672 | 672 | |
|---|
| 673 | 673 | drm_encoder_init(dev, drm_encoder, |
|---|
| 674 | 674 | &sti_tvout_encoder_funcs, DRM_MODE_ENCODER_LVDS, |
|---|
| .. | .. |
|---|
| 718 | 718 | |
|---|
| 719 | 719 | encoder->tvout = tvout; |
|---|
| 720 | 720 | |
|---|
| 721 | | - drm_encoder = (struct drm_encoder *) encoder; |
|---|
| 721 | + drm_encoder = &encoder->encoder; |
|---|
| 722 | 722 | |
|---|
| 723 | 723 | drm_encoder->possible_crtcs = ENCODER_CRTC_MASK; |
|---|
| 724 | | - drm_encoder->possible_clones = 1 << 0; |
|---|
| 725 | 724 | |
|---|
| 726 | 725 | drm_encoder_init(dev, drm_encoder, |
|---|
| 727 | 726 | &sti_tvout_encoder_funcs, DRM_MODE_ENCODER_DAC, NULL); |
|---|
| .. | .. |
|---|
| 767 | 766 | |
|---|
| 768 | 767 | encoder->tvout = tvout; |
|---|
| 769 | 768 | |
|---|
| 770 | | - drm_encoder = (struct drm_encoder *) encoder; |
|---|
| 769 | + drm_encoder = &encoder->encoder; |
|---|
| 771 | 770 | |
|---|
| 772 | 771 | drm_encoder->possible_crtcs = ENCODER_CRTC_MASK; |
|---|
| 773 | | - drm_encoder->possible_clones = 1 << 1; |
|---|
| 774 | 772 | |
|---|
| 775 | 773 | drm_encoder_init(dev, drm_encoder, |
|---|
| 776 | 774 | &sti_tvout_encoder_funcs, DRM_MODE_ENCODER_TMDS, NULL); |
|---|
| .. | .. |
|---|
| 786 | 784 | tvout->hdmi = sti_tvout_create_hdmi_encoder(dev, tvout); |
|---|
| 787 | 785 | tvout->hda = sti_tvout_create_hda_encoder(dev, tvout); |
|---|
| 788 | 786 | tvout->dvo = sti_tvout_create_dvo_encoder(dev, tvout); |
|---|
| 787 | + |
|---|
| 788 | + tvout->hdmi->possible_clones = drm_encoder_mask(tvout->hdmi) | |
|---|
| 789 | + drm_encoder_mask(tvout->hda) | drm_encoder_mask(tvout->dvo); |
|---|
| 790 | + tvout->hda->possible_clones = drm_encoder_mask(tvout->hdmi) | |
|---|
| 791 | + drm_encoder_mask(tvout->hda) | drm_encoder_mask(tvout->dvo); |
|---|
| 792 | + tvout->dvo->possible_clones = drm_encoder_mask(tvout->hdmi) | |
|---|
| 793 | + drm_encoder_mask(tvout->hda) | drm_encoder_mask(tvout->dvo); |
|---|
| 789 | 794 | } |
|---|
| 790 | 795 | |
|---|
| 791 | 796 | static void sti_tvout_destroy_encoders(struct sti_tvout *tvout) |
|---|
| .. | .. |
|---|
| 852 | 857 | DRM_ERROR("Invalid glue resource\n"); |
|---|
| 853 | 858 | return -ENOMEM; |
|---|
| 854 | 859 | } |
|---|
| 855 | | - tvout->regs = devm_ioremap_nocache(dev, res->start, resource_size(res)); |
|---|
| 860 | + tvout->regs = devm_ioremap(dev, res->start, resource_size(res)); |
|---|
| 856 | 861 | if (!tvout->regs) |
|---|
| 857 | 862 | return -ENOMEM; |
|---|
| 858 | 863 | |
|---|