Loading Documentation/devicetree/bindings/sound/omap-mcbsp.txt 0 → 100644 +45 −0 Original line number Diff line number Diff line * Texas Instruments OMAP2+ McBSP module Required properties: - compatible: "ti,omap2420-mcbsp" for McBSP on OMAP2420 "ti,omap2430-mcbsp" for McBSP on OMAP2430 "ti,omap3-mcbsp" for McBSP on OMAP3 "ti,omap4-mcbsp" for McBSP on OMAP4 and newer SoC - reg: Register location and size, for OMAP4+ as an array: <MPU access base address, size>, <L3 interconnect address, size>; - interrupts: Interrupt numbers for the McBSP port, as an array in case the McBSP IP have more interrupt lines: <OCP compliant irq>, <TX irq>, <RX irq>; - interrupt-parent: The parent interrupt controller - ti,buffer-size: Size of the FIFO on the port (OMAP2430 and newer SoC) - ti,hwmods: Name of the hwmod associated to the McBSP port Sidetone support for OMAP3 McBSP2 and 3 ports: - sidetone { }: Within this section the following parameters are required: - reg: Register location and size for the ST block - interrupts: The interrupt number for the ST block - interrupt-parent: The parent interrupt controller for the ST block Example: mcbsp2: mcbsp@49022000 { compatible = "ti,omap3-mcbsp"; #address-cells = <1>; #size-cells = <1>; reg = <0x49022000 0xff>; interrupts = <0 17 0x4>, /* OCP compliant interrup */ <0 62 0x4>, /* TX interrup */ <0 63 0x4>; /* RX interrup */ interrupt-parent = <&intc>; ti,buffer-size = <1280>; ti,hwmods = "mcbsp2"; sidetone { reg = <0x49028000 0xff>; interrupts = <0 4 0x4>; interrupt-parent = <&intc>; }; }; sound/soc/omap/omap-mcbsp.c +65 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ #include <linux/module.h> #include <linux/device.h> #include <linux/pm_runtime.h> #include <linux/of.h> #include <linux/of_device.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/pcm_params.h> Loading Loading @@ -737,13 +739,74 @@ int omap_mcbsp_st_add_controls(struct snd_soc_pcm_runtime *rtd) } EXPORT_SYMBOL_GPL(omap_mcbsp_st_add_controls); static struct omap_mcbsp_platform_data omap2420_pdata = { .reg_step = 4, .reg_size = 2, }; static struct omap_mcbsp_platform_data omap2430_pdata = { .reg_step = 4, .reg_size = 4, .has_ccr = true, }; static struct omap_mcbsp_platform_data omap3_pdata = { .reg_step = 4, .reg_size = 4, .has_ccr = true, .has_wakeup = true, }; static struct omap_mcbsp_platform_data omap4_pdata = { .reg_step = 4, .reg_size = 4, .has_ccr = true, .has_wakeup = true, }; static const struct of_device_id omap_mcbsp_of_match[] = { { .compatible = "ti,omap2420-mcbsp", .data = &omap2420_pdata, }, { .compatible = "ti,omap2430-mcbsp", .data = &omap2430_pdata, }, { .compatible = "ti,omap3-mcbsp", .data = &omap3_pdata, }, { .compatible = "ti,omap4-mcbsp", .data = &omap4_pdata, }, { }, }; MODULE_DEVICE_TABLE(of, omap_mcbsp_of_match); static __devinit int asoc_mcbsp_probe(struct platform_device *pdev) { struct omap_mcbsp_platform_data *pdata = dev_get_platdata(&pdev->dev); struct omap_mcbsp *mcbsp; const struct of_device_id *match; int ret; if (!pdata) { match = of_match_device(omap_mcbsp_of_match, &pdev->dev); if (match) { struct device_node *node = pdev->dev.of_node; int buffer_size; pdata = devm_kzalloc(&pdev->dev, sizeof(struct omap_mcbsp_platform_data), GFP_KERNEL); if (!pdata) return -ENOMEM; memcpy(pdata, match->data, sizeof(*pdata)); if (!of_property_read_u32(node, "ti,buffer-size", &buffer_size)) pdata->buffer_size = buffer_size; } else if (!pdata) { dev_err(&pdev->dev, "missing platform data.\n"); return -EINVAL; } Loading Loading @@ -785,6 +848,7 @@ static struct platform_driver asoc_mcbsp_driver = { .driver = { .name = "omap-mcbsp", .owner = THIS_MODULE, .of_match_table = omap_mcbsp_of_match, }, .probe = asoc_mcbsp_probe, Loading Loading
Documentation/devicetree/bindings/sound/omap-mcbsp.txt 0 → 100644 +45 −0 Original line number Diff line number Diff line * Texas Instruments OMAP2+ McBSP module Required properties: - compatible: "ti,omap2420-mcbsp" for McBSP on OMAP2420 "ti,omap2430-mcbsp" for McBSP on OMAP2430 "ti,omap3-mcbsp" for McBSP on OMAP3 "ti,omap4-mcbsp" for McBSP on OMAP4 and newer SoC - reg: Register location and size, for OMAP4+ as an array: <MPU access base address, size>, <L3 interconnect address, size>; - interrupts: Interrupt numbers for the McBSP port, as an array in case the McBSP IP have more interrupt lines: <OCP compliant irq>, <TX irq>, <RX irq>; - interrupt-parent: The parent interrupt controller - ti,buffer-size: Size of the FIFO on the port (OMAP2430 and newer SoC) - ti,hwmods: Name of the hwmod associated to the McBSP port Sidetone support for OMAP3 McBSP2 and 3 ports: - sidetone { }: Within this section the following parameters are required: - reg: Register location and size for the ST block - interrupts: The interrupt number for the ST block - interrupt-parent: The parent interrupt controller for the ST block Example: mcbsp2: mcbsp@49022000 { compatible = "ti,omap3-mcbsp"; #address-cells = <1>; #size-cells = <1>; reg = <0x49022000 0xff>; interrupts = <0 17 0x4>, /* OCP compliant interrup */ <0 62 0x4>, /* TX interrup */ <0 63 0x4>; /* RX interrup */ interrupt-parent = <&intc>; ti,buffer-size = <1280>; ti,hwmods = "mcbsp2"; sidetone { reg = <0x49028000 0xff>; interrupts = <0 4 0x4>; interrupt-parent = <&intc>; }; };
sound/soc/omap/omap-mcbsp.c +65 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ #include <linux/module.h> #include <linux/device.h> #include <linux/pm_runtime.h> #include <linux/of.h> #include <linux/of_device.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/pcm_params.h> Loading Loading @@ -737,13 +739,74 @@ int omap_mcbsp_st_add_controls(struct snd_soc_pcm_runtime *rtd) } EXPORT_SYMBOL_GPL(omap_mcbsp_st_add_controls); static struct omap_mcbsp_platform_data omap2420_pdata = { .reg_step = 4, .reg_size = 2, }; static struct omap_mcbsp_platform_data omap2430_pdata = { .reg_step = 4, .reg_size = 4, .has_ccr = true, }; static struct omap_mcbsp_platform_data omap3_pdata = { .reg_step = 4, .reg_size = 4, .has_ccr = true, .has_wakeup = true, }; static struct omap_mcbsp_platform_data omap4_pdata = { .reg_step = 4, .reg_size = 4, .has_ccr = true, .has_wakeup = true, }; static const struct of_device_id omap_mcbsp_of_match[] = { { .compatible = "ti,omap2420-mcbsp", .data = &omap2420_pdata, }, { .compatible = "ti,omap2430-mcbsp", .data = &omap2430_pdata, }, { .compatible = "ti,omap3-mcbsp", .data = &omap3_pdata, }, { .compatible = "ti,omap4-mcbsp", .data = &omap4_pdata, }, { }, }; MODULE_DEVICE_TABLE(of, omap_mcbsp_of_match); static __devinit int asoc_mcbsp_probe(struct platform_device *pdev) { struct omap_mcbsp_platform_data *pdata = dev_get_platdata(&pdev->dev); struct omap_mcbsp *mcbsp; const struct of_device_id *match; int ret; if (!pdata) { match = of_match_device(omap_mcbsp_of_match, &pdev->dev); if (match) { struct device_node *node = pdev->dev.of_node; int buffer_size; pdata = devm_kzalloc(&pdev->dev, sizeof(struct omap_mcbsp_platform_data), GFP_KERNEL); if (!pdata) return -ENOMEM; memcpy(pdata, match->data, sizeof(*pdata)); if (!of_property_read_u32(node, "ti,buffer-size", &buffer_size)) pdata->buffer_size = buffer_size; } else if (!pdata) { dev_err(&pdev->dev, "missing platform data.\n"); return -EINVAL; } Loading Loading @@ -785,6 +848,7 @@ static struct platform_driver asoc_mcbsp_driver = { .driver = { .name = "omap-mcbsp", .owner = THIS_MODULE, .of_match_table = omap_mcbsp_of_match, }, .probe = asoc_mcbsp_probe, Loading