Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 344629
b: refs/heads/master
c: 14840b9
h: refs/heads/master
i:
  344627: 770ce2b
v: v3
  • Loading branch information
Ricardo Neri authored and Tomi Valkeinen committed Nov 6, 2012
1 parent a99a8fb commit 9c6a9f5
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d7b6f4437fb7796af774c5423a4b9b486b19233f
refs/heads/master: 14840b9a83c6a56629db2ba0ec247503e975f143
62 changes: 62 additions & 0 deletions trunk/drivers/video/omap2/dss/hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@
static struct {
struct mutex lock;
struct platform_device *pdev;
#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
struct platform_device *audio_pdev;
#endif

struct hdmi_ip_data ip_data;

Expand Down Expand Up @@ -818,6 +821,54 @@ static void hdmi_put_clocks(void)
}

#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
static int hdmi_probe_audio(struct platform_device *pdev)
{
struct resource *res;
struct platform_device *aud_pdev;
u32 port_offset, port_size;
struct resource aud_res[2] = {
DEFINE_RES_MEM(-1, -1),
DEFINE_RES_DMA(-1),
};

res = platform_get_resource(hdmi.pdev, IORESOURCE_MEM, 0);
if (!res) {
DSSERR("can't get IORESOURCE_MEM HDMI\n");
return -EINVAL;
}

/*
* Pass DMA audio port to audio drivers.
* Audio drivers should not ioremap it.
*/
hdmi.ip_data.ops->audio_get_dma_port(&port_offset, &port_size);

aud_res[0].start = res->start + port_offset;
aud_res[0].end = aud_res[0].start + port_size - 1;

res = platform_get_resource(hdmi.pdev, IORESOURCE_DMA, 0);
if (!res) {
DSSERR("can't get IORESOURCE_DMA HDMI\n");
return -EINVAL;
}

/* Pass the audio DMA request resource to audio drivers. */
aud_res[1].start = res->start;

/* create platform device for HDMI audio driver */
aud_pdev = platform_device_register_simple("omap_hdmi_audio",
pdev->id, aud_res,
ARRAY_SIZE(aud_res));
if (IS_ERR(aud_pdev)) {
DSSERR("Can't instantiate hdmi-audio\n");
return -ENODEV;
}

hdmi.audio_pdev = aud_pdev;

return 0;
}

int hdmi_compute_acr(u32 sample_freq, u32 *n, u32 *cts)
{
u32 deep_color;
Expand Down Expand Up @@ -1098,6 +1149,12 @@ static int __init omapdss_hdmihw_probe(struct platform_device *pdev)

hdmi_probe_pdata(pdev);

#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
r = hdmi_probe_audio(pdev);
if (r)
DSSWARN("could not create platform device for audio");
#endif

return 0;

err_panel_init:
Expand All @@ -1114,6 +1171,11 @@ static int __exit hdmi_remove_child(struct device *dev, void *data)

static int __exit omapdss_hdmihw_remove(struct platform_device *pdev)
{
#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
if (hdmi.audio_pdev != NULL)
platform_device_unregister(hdmi.audio_pdev);
#endif

device_for_each_child(&pdev->dev, NULL, hdmi_remove_child);

dss_unregister_child_devices(&pdev->dev);
Expand Down

0 comments on commit 9c6a9f5

Please sign in to comment.