drivers/gpu/drm/omapdrm/dss/output.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/omapdrm/dss/output.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/omapdrm/dss/output.c- Extension
.c- Size
- 3162 bytes
- Lines
- 140
- Domain
- Driver Families
- Bucket
- drivers/gpu
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/kernel.hlinux/module.hlinux/platform_device.hlinux/slab.hlinux/of.hlinux/of_graph.hdrm/drm_bridge.hdrm/drm_panel.hdss.homapdss.h
Detected Declarations
function Copyrightfunction omapdss_device_cleanup_outputfunction dss_mgr_set_timingsfunction dss_mgr_set_lcd_configfunction dss_mgr_enablefunction dss_mgr_disablefunction dss_mgr_start_updatefunction dss_mgr_register_framedone_handlerfunction dss_mgr_unregister_framedone_handler
Annotated Snippet
if (IS_ERR(bridge)) {
dev_err(out->dev,
"unable to create panel bridge (%ld)\n",
PTR_ERR(bridge));
ret = PTR_ERR(bridge);
goto error;
}
out->bridge = drm_bridge_get(bridge);
}
if (local_bridge) {
if (!out->bridge) {
ret = -EPROBE_DEFER;
goto error;
}
out->next_bridge = out->bridge;
out->bridge = drm_bridge_get(local_bridge);
}
if (!out->bridge) {
ret = -EPROBE_DEFER;
goto error;
}
return 0;
error:
omapdss_device_cleanup_output(out);
return ret;
}
void omapdss_device_cleanup_output(struct omap_dss_device *out)
{
if (out->bridge && out->panel)
drm_panel_bridge_remove(out->next_bridge ?
out->next_bridge : out->bridge);
drm_bridge_put(out->next_bridge);
drm_bridge_put(out->bridge);
}
void dss_mgr_set_timings(struct omap_dss_device *dssdev,
const struct videomode *vm)
{
omap_crtc_dss_set_timings(dssdev->dss->mgr_ops_priv,
dssdev->dispc_channel, vm);
}
void dss_mgr_set_lcd_config(struct omap_dss_device *dssdev,
const struct dss_lcd_mgr_config *config)
{
omap_crtc_dss_set_lcd_config(dssdev->dss->mgr_ops_priv,
dssdev->dispc_channel, config);
}
int dss_mgr_enable(struct omap_dss_device *dssdev)
{
return omap_crtc_dss_enable(dssdev->dss->mgr_ops_priv,
dssdev->dispc_channel);
}
void dss_mgr_disable(struct omap_dss_device *dssdev)
{
omap_crtc_dss_disable(dssdev->dss->mgr_ops_priv,
dssdev->dispc_channel);
}
void dss_mgr_start_update(struct omap_dss_device *dssdev)
{
omap_crtc_dss_start_update(dssdev->dss->mgr_ops_priv,
dssdev->dispc_channel);
}
int dss_mgr_register_framedone_handler(struct omap_dss_device *dssdev,
void (*handler)(void *), void *data)
{
struct dss_device *dss = dssdev->dss;
return omap_crtc_dss_register_framedone(dss->mgr_ops_priv,
dssdev->dispc_channel,
handler, data);
}
void dss_mgr_unregister_framedone_handler(struct omap_dss_device *dssdev,
void (*handler)(void *), void *data)
{
struct dss_device *dss = dssdev->dss;
Annotation
- Immediate include surface: `linux/kernel.h`, `linux/module.h`, `linux/platform_device.h`, `linux/slab.h`, `linux/of.h`, `linux/of_graph.h`, `drm/drm_bridge.h`, `drm/drm_panel.h`.
- Detected declarations: `function Copyright`, `function omapdss_device_cleanup_output`, `function dss_mgr_set_timings`, `function dss_mgr_set_lcd_config`, `function dss_mgr_enable`, `function dss_mgr_disable`, `function dss_mgr_start_update`, `function dss_mgr_register_framedone_handler`, `function dss_mgr_unregister_framedone_handler`.
- Atlas domain: Driver Families / drivers/gpu.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.