Lines Matching +full:audmux +full:- +full:port
1 // SPDX-License-Identifier: GPL-2.0+
20 #include "imx-audmux.h"
22 #define DRIVER_NAME "imx-audmux"
37 static const char *audmux_port_string(int port) in audmux_port_string() argument
39 switch (port) { in audmux_port_string()
41 return "imx-ssi.0"; in audmux_port_string()
43 return "imx-ssi.1"; in audmux_port_string()
62 uintptr_t port = (uintptr_t)file->private_data; in audmux_read_file() local
71 ptcr = readl(audmux_base + IMX_AUDMUX_V2_PTCR(port)); in audmux_read_file()
72 pdcr = readl(audmux_base + IMX_AUDMUX_V2_PDCR(port)); in audmux_read_file()
79 return -ENOMEM; in audmux_read_file()
85 ret += scnprintf(buf + ret, PAGE_SIZE - ret, in audmux_read_file()
89 ret += scnprintf(buf + ret, PAGE_SIZE - ret, in audmux_read_file()
93 ret += scnprintf(buf + ret, PAGE_SIZE - ret, in audmux_read_file()
97 ret += scnprintf(buf + ret, PAGE_SIZE - ret, in audmux_read_file()
100 ret += scnprintf(buf + ret, PAGE_SIZE - ret, "\n"); in audmux_read_file()
103 ret += scnprintf(buf + ret, PAGE_SIZE - ret, in audmux_read_file()
104 "Port is symmetric"); in audmux_read_file()
107 ret += scnprintf(buf + ret, PAGE_SIZE - ret, in audmux_read_file()
111 ret += scnprintf(buf + ret, PAGE_SIZE - ret, in audmux_read_file()
115 ret += scnprintf(buf + ret, PAGE_SIZE - ret, in audmux_read_file()
119 ret += scnprintf(buf + ret, PAGE_SIZE - ret, in audmux_read_file()
123 ret += scnprintf(buf + ret, PAGE_SIZE - ret, in audmux_read_file()
145 audmux_debugfs_root = debugfs_create_dir("audmux", NULL); in audmux_debugfs_init()
175 .name = "imx21-audmux",
178 .name = "imx31-audmux",
187 { .compatible = "fsl,imx21-audmux", .data = &imx_audmux_ids[0], },
188 { .compatible = "fsl,imx31-audmux", .data = &imx_audmux_ids[1], },
197 int imx_audmux_v1_configure_port(unsigned int port, unsigned int pcr) in imx_audmux_v1_configure_port() argument
200 return -EINVAL; in imx_audmux_v1_configure_port()
203 return -ENOSYS; in imx_audmux_v1_configure_port()
205 if (port >= ARRAY_SIZE(port_mapping)) in imx_audmux_v1_configure_port()
206 return -EINVAL; in imx_audmux_v1_configure_port()
208 writel(pcr, audmux_base + port_mapping[port]); in imx_audmux_v1_configure_port()
214 int imx_audmux_v2_configure_port(unsigned int port, unsigned int ptcr, in imx_audmux_v2_configure_port() argument
220 return -EINVAL; in imx_audmux_v2_configure_port()
223 return -ENOSYS; in imx_audmux_v2_configure_port()
231 writel(ptcr, audmux_base + IMX_AUDMUX_V2_PTCR(port)); in imx_audmux_v2_configure_port()
232 writel(pdcr, audmux_base + IMX_AUDMUX_V2_PDCR(port)); in imx_audmux_v2_configure_port()
247 unsigned int port; in imx_audmux_parse_dt_defaults() local
255 ret = of_property_read_u32(child, "fsl,audmux-port", &port); in imx_audmux_parse_dt_defaults()
257 dev_warn(&pdev->dev, "Failed to get fsl,audmux-port of child node \"%pOF\"\n", in imx_audmux_parse_dt_defaults()
261 if (!of_property_read_bool(child, "fsl,port-config")) { in imx_audmux_parse_dt_defaults()
262 dev_warn(&pdev->dev, "child node \"%pOF\" does not have property fsl,port-config\n", in imx_audmux_parse_dt_defaults()
268 "fsl,port-config", i, &val)) == 0; in imx_audmux_parse_dt_defaults()
280 if (ret != -EOVERFLOW) { in imx_audmux_parse_dt_defaults()
281 dev_err(&pdev->dev, "Failed to read u32 at index %d of child %pOF\n", in imx_audmux_parse_dt_defaults()
288 dev_err(&pdev->dev, "One pdcr value is missing in child node %pOF\n", in imx_audmux_parse_dt_defaults()
292 imx_audmux_v2_configure_port(port, ptcr, pdcr); in imx_audmux_parse_dt_defaults()
294 imx_audmux_v1_configure_port(port, pcr); in imx_audmux_parse_dt_defaults()
304 of_match_device(imx_audmux_dt_ids, &pdev->dev); in imx_audmux_probe()
310 audmux_clk = devm_clk_get(&pdev->dev, "audmux"); in imx_audmux_probe()
312 dev_dbg(&pdev->dev, "cannot get clock: %ld\n", in imx_audmux_probe()
318 pdev->id_entry = of_id->data; in imx_audmux_probe()
319 audmux_type = pdev->id_entry->driver_data; in imx_audmux_probe()
330 dev_err(&pdev->dev, "unsupported version!\n"); in imx_audmux_probe()
331 return -EINVAL; in imx_audmux_probe()
334 regcache = devm_kzalloc(&pdev->dev, sizeof(u32) * reg_max, GFP_KERNEL); in imx_audmux_probe()
336 return -ENOMEM; in imx_audmux_probe()
339 imx_audmux_parse_dt_defaults(pdev, pdev->dev.of_node); in imx_audmux_probe()
409 MODULE_DESCRIPTION("Freescale i.MX AUDMUX driver");