@@ -119,6 +119,58 @@ int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper)
119
119
}
120
120
EXPORT_SYMBOL (drm_fb_helper_single_add_all_connectors );
121
121
122
+ int drm_fb_helper_add_one_connector (struct drm_fb_helper * fb_helper , struct drm_connector * connector )
123
+ {
124
+ struct drm_fb_helper_connector * * temp ;
125
+ struct drm_fb_helper_connector * fb_helper_connector ;
126
+
127
+ WARN_ON (!mutex_is_locked (& fb_helper -> dev -> mode_config .mutex ));
128
+ if (fb_helper -> connector_count + 1 > fb_helper -> connector_info_alloc_count ) {
129
+ temp = krealloc (fb_helper -> connector_info , sizeof (struct drm_fb_helper_connector ) * (fb_helper -> connector_count + 1 ), GFP_KERNEL );
130
+ if (!temp )
131
+ return - ENOMEM ;
132
+
133
+ fb_helper -> connector_info_alloc_count = fb_helper -> connector_count + 1 ;
134
+ fb_helper -> connector_info = temp ;
135
+ }
136
+
137
+
138
+ fb_helper_connector = kzalloc (sizeof (struct drm_fb_helper_connector ), GFP_KERNEL );
139
+ if (!fb_helper_connector )
140
+ return - ENOMEM ;
141
+
142
+ fb_helper_connector -> connector = connector ;
143
+ fb_helper -> connector_info [fb_helper -> connector_count ++ ] = fb_helper_connector ;
144
+ return 0 ;
145
+ }
146
+ EXPORT_SYMBOL (drm_fb_helper_add_one_connector );
147
+
148
+ int drm_fb_helper_remove_one_connector (struct drm_fb_helper * fb_helper ,
149
+ struct drm_connector * connector )
150
+ {
151
+ struct drm_fb_helper_connector * fb_helper_connector ;
152
+ int i , j ;
153
+
154
+ WARN_ON (!mutex_is_locked (& fb_helper -> dev -> mode_config .mutex ));
155
+
156
+ for (i = 0 ; i < fb_helper -> connector_count ; i ++ ) {
157
+ if (fb_helper -> connector_info [i ]-> connector == connector )
158
+ break ;
159
+ }
160
+
161
+ if (i == fb_helper -> connector_count )
162
+ return - EINVAL ;
163
+ fb_helper_connector = fb_helper -> connector_info [i ];
164
+
165
+ for (j = i + 1 ; j < fb_helper -> connector_count ; j ++ ) {
166
+ fb_helper -> connector_info [j - 1 ] = fb_helper -> connector_info [j ];
167
+ }
168
+ fb_helper -> connector_count -- ;
169
+ kfree (fb_helper_connector );
170
+ return 0 ;
171
+ }
172
+ EXPORT_SYMBOL (drm_fb_helper_remove_one_connector );
173
+
122
174
static int drm_fb_helper_parse_command_line (struct drm_fb_helper * fb_helper )
123
175
{
124
176
struct drm_fb_helper_connector * fb_helper_conn ;
@@ -596,6 +648,7 @@ int drm_fb_helper_init(struct drm_device *dev,
596
648
kfree (fb_helper -> crtc_info );
597
649
return - ENOMEM ;
598
650
}
651
+ fb_helper -> connector_info_alloc_count = dev -> mode_config .num_connector ;
599
652
fb_helper -> connector_count = 0 ;
600
653
601
654
for (i = 0 ; i < crtc_count ; i ++ ) {
0 commit comments