Skip to content

Commit bc730af

Browse files
committed
drm: apple: Only match backlight service on DCP with panel
Signed-off-by: Janne Grunau <[email protected]>
1 parent 4d7a4ce commit bc730af

5 files changed

Lines changed: 27 additions & 7 deletions

File tree

drivers/gpu/drm/apple/dcp-internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,5 +195,6 @@ struct apple_dcp {
195195
};
196196

197197
int dcp_backlight_register(struct apple_dcp *dcp);
198+
bool dcp_has_panel(struct apple_dcp *dcp);
198199

199200
#endif /* __APPLE_DCP_INTERNAL_H__ */

drivers/gpu/drm/apple/dcp.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ void dcp_set_dimensions(struct apple_dcp *dcp)
8686
}
8787
}
8888

89+
bool dcp_has_panel(struct apple_dcp *dcp)
90+
{
91+
return dcp->panel.width_mm > 0;
92+
}
93+
8994
/*
9095
* Helper to send a DRM vblank event. We do not know how call swap_submit_dcp
9196
* without surfaces. To avoid timeouts in drm_atomic_helper_wait_for_vblanks

drivers/gpu/drm/apple/iomfb_template.c

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,12 @@ static bool iomfbep_cb_match_backlight_service(struct apple_dcp *dcp, int tag, v
183183
{
184184
trace_iomfb_callback(dcp, tag, __func__);
185185

186+
if (!dcp_has_panel(dcp)) {
187+
u8 *succ = out;
188+
*succ = true;
189+
return true;
190+
}
191+
186192
iomfb_a132_backlight_service_matched(dcp, false, complete_backlight_service_matched, out);
187193

188194
// return false for deferred ACK
@@ -194,11 +200,13 @@ static void iomfb_cb_pr_publish(struct apple_dcp *dcp, struct iomfb_property *pr
194200
switch (prop->id) {
195201
case IOMFB_PROPERTY_NITS:
196202
{
197-
dcp->brightness.nits = prop->value / dcp->brightness.scale;
198-
/* notify backlight device of the initial brightness */
199-
if (!dcp->brightness.bl_dev && dcp->brightness.maximum > 0)
200-
schedule_work(&dcp->bl_register_wq);
201-
trace_iomfb_brightness(dcp, prop->value);
203+
if (dcp_has_panel(dcp)) {
204+
dcp->brightness.nits = prop->value / dcp->brightness.scale;
205+
/* notify backlight device of the initial brightness */
206+
if (!dcp->brightness.bl_dev && dcp->brightness.maximum > 0)
207+
schedule_work(&dcp->bl_register_wq);
208+
trace_iomfb_brightness(dcp, prop->value);
209+
}
202210
break;
203211
}
204212
default:
@@ -1003,6 +1011,11 @@ dcpep_cb_get_tiling_state(struct apple_dcp *dcp,
10031011
};
10041012
}
10051013

1014+
static u8 dcpep_cb_create_backlight_service(struct apple_dcp *dcp)
1015+
{
1016+
return dcp_has_panel(dcp);
1017+
}
1018+
10061019
TRAMPOLINE_VOID(trampoline_nop, dcpep_cb_nop);
10071020
TRAMPOLINE_OUT(trampoline_true, dcpep_cb_true, u8);
10081021
TRAMPOLINE_OUT(trampoline_false, dcpep_cb_false, u8);
@@ -1053,6 +1066,7 @@ TRAMPOLINE_IN(trampoline_pr_publish, iomfb_cb_pr_publish,
10531066
struct iomfb_property);
10541067
TRAMPOLINE_INOUT(trampoline_get_tiling_state, dcpep_cb_get_tiling_state,
10551068
struct dcpep_get_tiling_state_req, struct dcpep_get_tiling_state_resp);
1069+
TRAMPOLINE_OUT(trampoline_create_backlight_service, dcpep_cb_create_backlight_service, u8);
10561070

10571071
/*
10581072
* Callback for swap requests. If a swap failed, we'll never get a swap

drivers/gpu/drm/apple/iomfb_v12_3.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ static const iomfb_cb_handler cb_handlers[IOMFB_MAX_CB] = {
4949
[108] = trampoline_true, /* create_product_service */
5050
[109] = trampoline_true, /* create_pmu_service */
5151
[110] = trampoline_true, /* create_iomfb_service */
52-
[111] = trampoline_true, /* create_backlight_service */
52+
[111] = trampoline_create_backlight_service,
5353
[116] = dcpep_cb_boot_1,
5454
[117] = trampoline_false, /* is_dark_boot */
5555
[118] = trampoline_false, /* is_dark_boot / is_waking_from_hibernate*/

drivers/gpu/drm/apple/iomfb_v13_3.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ static const iomfb_cb_handler cb_handlers[IOMFB_MAX_CB] = {
5151
[109] = trampoline_true, /* create_product_service */
5252
[110] = trampoline_true, /* create_pmu_service */
5353
[111] = trampoline_true, /* create_iomfb_service */
54-
[112] = trampoline_true, /* create_backlight_service */
54+
[112] = trampoline_create_backlight_service,
5555
[113] = trampoline_true, /* create_nvram_servce? */
5656
[114] = trampoline_get_tiling_state,
5757
[115] = trampoline_false, /* set_tiling_state */

0 commit comments

Comments
 (0)