Commit 74bf2ad508efa93db4254c9da9c7238da44e2c58

Authored by Dave Airlie
1 parent 210bed8f82

drm/kms: make fb helper work for all drivers.

This initialises the fb helper with the connector helper,
so that the fb cmdline code works for intel as well.

Signed-off-by: Dave Airlie <airlied@redhat.com>

Showing 3 changed files with 43 additions and 26 deletions Side-by-side Diff

drivers/gpu/drm/drm_fb_helper.c
... ... @@ -47,7 +47,6 @@
47 47 return -ENOMEM;
48 48  
49 49 return 0;
50   -
51 50 }
52 51 EXPORT_SYMBOL(drm_fb_helper_add_connector);
53 52  
drivers/gpu/drm/radeon/radeon_connectors.c
... ... @@ -808,7 +808,9 @@
808 808 switch (connector_type) {
809 809 case DRM_MODE_CONNECTOR_VGA:
810 810 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
811   - drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
  811 + ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
  812 + if (ret)
  813 + goto failed;
812 814 if (i2c_bus->valid) {
813 815 radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "VGA");
814 816 if (!radeon_connector->ddc_bus)
... ... @@ -821,7 +823,9 @@
821 823 break;
822 824 case DRM_MODE_CONNECTOR_DVIA:
823 825 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
824   - drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
  826 + ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
  827 + if (ret)
  828 + goto failed;
825 829 if (i2c_bus->valid) {
826 830 radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DVI");
827 831 if (!radeon_connector->ddc_bus)
... ... @@ -841,7 +845,9 @@
841 845 radeon_dig_connector->igp_lane_info = igp_lane_info;
842 846 radeon_connector->con_priv = radeon_dig_connector;
843 847 drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
844   - drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
  848 + ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
  849 + if (ret)
  850 + goto failed;
845 851 if (i2c_bus->valid) {
846 852 radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DVI");
847 853 if (!radeon_connector->ddc_bus)
... ... @@ -865,7 +871,9 @@
865 871 radeon_dig_connector->igp_lane_info = igp_lane_info;
866 872 radeon_connector->con_priv = radeon_dig_connector;
867 873 drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
868   - drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
  874 + ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
  875 + if (ret)
  876 + goto failed;
869 877 if (i2c_bus->valid) {
870 878 radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "HDMI");
871 879 if (!radeon_connector->ddc_bus)
... ... @@ -884,7 +892,9 @@
884 892 radeon_dig_connector->igp_lane_info = igp_lane_info;
885 893 radeon_connector->con_priv = radeon_dig_connector;
886 894 drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
887   - drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
  895 + ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
  896 + if (ret)
  897 + goto failed;
888 898 if (i2c_bus->valid) {
889 899 radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DP");
890 900 if (!radeon_connector->ddc_bus)
891 901  
... ... @@ -897,12 +907,14 @@
897 907 case DRM_MODE_CONNECTOR_9PinDIN:
898 908 if (radeon_tv == 1) {
899 909 drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
900   - drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
  910 + ret = drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
  911 + if (ret)
  912 + goto failed;
  913 + radeon_connector->dac_load_detect = true;
  914 + drm_connector_attach_property(&radeon_connector->base,
  915 + rdev->mode_info.load_detect_property,
  916 + 1);
901 917 }
902   - radeon_connector->dac_load_detect = true;
903   - drm_connector_attach_property(&radeon_connector->base,
904   - rdev->mode_info.load_detect_property,
905   - 1);
906 918 break;
907 919 case DRM_MODE_CONNECTOR_LVDS:
908 920 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
... ... @@ -912,7 +924,9 @@
912 924 radeon_dig_connector->igp_lane_info = igp_lane_info;
913 925 radeon_connector->con_priv = radeon_dig_connector;
914 926 drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
915   - drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
  927 + ret = drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
  928 + if (ret)
  929 + goto failed;
916 930 if (i2c_bus->valid) {
917 931 radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "LVDS");
918 932 if (!radeon_connector->ddc_bus)
... ... @@ -926,10 +940,6 @@
926 940 break;
927 941 }
928 942  
929   - ret = drm_fb_helper_add_connector(connector);
930   - if (ret)
931   - goto failed;
932   -
933 943 connector->display_info.subpixel_order = subpixel_order;
934 944 drm_sysfs_connector_add(connector);
935 945 return;
... ... @@ -978,7 +988,9 @@
978 988 switch (connector_type) {
979 989 case DRM_MODE_CONNECTOR_VGA:
980 990 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
981   - drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
  991 + ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
  992 + if (ret)
  993 + goto failed;
982 994 if (i2c_bus->valid) {
983 995 radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "VGA");
984 996 if (!radeon_connector->ddc_bus)
... ... @@ -991,7 +1003,9 @@
991 1003 break;
992 1004 case DRM_MODE_CONNECTOR_DVIA:
993 1005 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
994   - drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
  1006 + ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
  1007 + if (ret)
  1008 + goto failed;
995 1009 if (i2c_bus->valid) {
996 1010 radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DVI");
997 1011 if (!radeon_connector->ddc_bus)
... ... @@ -1005,7 +1019,9 @@
1005 1019 case DRM_MODE_CONNECTOR_DVII:
1006 1020 case DRM_MODE_CONNECTOR_DVID:
1007 1021 drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1008   - drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
  1022 + ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
  1023 + if (ret)
  1024 + goto failed;
1009 1025 if (i2c_bus->valid) {
1010 1026 radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DVI");
1011 1027 if (!radeon_connector->ddc_bus)
... ... @@ -1022,7 +1038,9 @@
1022 1038 case DRM_MODE_CONNECTOR_9PinDIN:
1023 1039 if (radeon_tv == 1) {
1024 1040 drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
1025   - drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
  1041 + ret = drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
  1042 + if (ret)
  1043 + goto failed;
1026 1044 radeon_connector->dac_load_detect = true;
1027 1045 drm_connector_attach_property(&radeon_connector->base,
1028 1046 rdev->mode_info.load_detect_property,
... ... @@ -1031,7 +1049,9 @@
1031 1049 break;
1032 1050 case DRM_MODE_CONNECTOR_LVDS:
1033 1051 drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
1034   - drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
  1052 + ret = drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
  1053 + if (ret)
  1054 + goto failed;
1035 1055 if (i2c_bus->valid) {
1036 1056 radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "LVDS");
1037 1057 if (!radeon_connector->ddc_bus)
... ... @@ -1043,10 +1063,6 @@
1043 1063 subpixel_order = SubPixelHorizontalRGB;
1044 1064 break;
1045 1065 }
1046   -
1047   - ret = drm_fb_helper_add_connector(connector);
1048   - if (ret)
1049   - goto failed;
1050 1066  
1051 1067 connector->display_info.subpixel_order = subpixel_order;
1052 1068 drm_sysfs_connector_add(connector);
include/drm/drm_crtc_helper.h
... ... @@ -39,6 +39,7 @@
39 39  
40 40 #include <linux/fb.h>
41 41  
  42 +#include "drm_fb_helper.h"
42 43 struct drm_crtc_helper_funcs {
43 44 /*
44 45 * Control power levels on the CRTC. If the mode passed in is
45 46  
... ... @@ -119,10 +120,11 @@
119 120 encoder->helper_private = (void *)funcs;
120 121 }
121 122  
122   -static inline void drm_connector_helper_add(struct drm_connector *connector,
  123 +static inline int drm_connector_helper_add(struct drm_connector *connector,
123 124 const struct drm_connector_helper_funcs *funcs)
124 125 {
125 126 connector->helper_private = (void *)funcs;
  127 + return drm_fb_helper_add_connector(connector);
126 128 }
127 129  
128 130 extern int drm_helper_resume_force_mode(struct drm_device *dev);