• Home
  • Raw
  • Download

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
69 ptcr = readl(audmux_base + IMX_AUDMUX_V2_PTCR(port)); in audmux_read_file()
70 pdcr = readl(audmux_base + IMX_AUDMUX_V2_PDCR(port)); in audmux_read_file()
76 return -ENOMEM; in audmux_read_file()
81 ret += scnprintf(buf + ret, PAGE_SIZE - ret, 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()
96 ret += scnprintf(buf + ret, PAGE_SIZE - ret, "\n"); in audmux_read_file()
99 ret += scnprintf(buf + ret, PAGE_SIZE - ret, in audmux_read_file()
100 "Port is symmetric"); in audmux_read_file()
103 ret += scnprintf(buf + ret, PAGE_SIZE - ret, 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()
141 audmux_debugfs_root = debugfs_create_dir("audmux", NULL); in audmux_debugfs_init()
170 { .compatible = "fsl,imx21-audmux", .data = (void *)IMX21_AUDMUX, },
171 { .compatible = "fsl,imx31-audmux", .data = (void *)IMX31_AUDMUX, },
180 int imx_audmux_v1_configure_port(unsigned int port, unsigned int pcr) in imx_audmux_v1_configure_port() argument
183 return -EINVAL; in imx_audmux_v1_configure_port()
186 return -ENOSYS; in imx_audmux_v1_configure_port()
188 if (port >= ARRAY_SIZE(port_mapping)) in imx_audmux_v1_configure_port()
189 return -EINVAL; in imx_audmux_v1_configure_port()
191 writel(pcr, audmux_base + port_mapping[port]); in imx_audmux_v1_configure_port()
197 int imx_audmux_v2_configure_port(unsigned int port, unsigned int ptcr, in imx_audmux_v2_configure_port() argument
203 return -EINVAL; in imx_audmux_v2_configure_port()
206 return -ENOSYS; in imx_audmux_v2_configure_port()
212 writel(ptcr, audmux_base + IMX_AUDMUX_V2_PTCR(port)); in imx_audmux_v2_configure_port()
213 writel(pdcr, audmux_base + IMX_AUDMUX_V2_PDCR(port)); in imx_audmux_v2_configure_port()
227 unsigned int port; in imx_audmux_parse_dt_defaults() local
235 ret = of_property_read_u32(child, "fsl,audmux-port", &port); in imx_audmux_parse_dt_defaults()
237 dev_warn(&pdev->dev, "Failed to get fsl,audmux-port of child node \"%pOF\"\n", in imx_audmux_parse_dt_defaults()
241 if (!of_property_read_bool(child, "fsl,port-config")) { in imx_audmux_parse_dt_defaults()
242 dev_warn(&pdev->dev, "child node \"%pOF\" does not have property fsl,port-config\n", in imx_audmux_parse_dt_defaults()
248 "fsl,port-config", i, &val)) == 0; in imx_audmux_parse_dt_defaults()
260 if (ret != -EOVERFLOW) { in imx_audmux_parse_dt_defaults()
261 dev_err(&pdev->dev, "Failed to read u32 at index %d of child %pOF\n", in imx_audmux_parse_dt_defaults()
268 dev_err(&pdev->dev, "One pdcr value is missing in child node %pOF\n", in imx_audmux_parse_dt_defaults()
272 imx_audmux_v2_configure_port(port, ptcr, pdcr); in imx_audmux_parse_dt_defaults()
274 imx_audmux_v1_configure_port(port, pcr); in imx_audmux_parse_dt_defaults()
287 audmux_clk = devm_clk_get(&pdev->dev, "audmux"); in imx_audmux_probe()
289 dev_dbg(&pdev->dev, "cannot get clock: %ld\n", in imx_audmux_probe()
294 audmux_type = (uintptr_t)of_device_get_match_data(&pdev->dev); in imx_audmux_probe()
305 dev_err(&pdev->dev, "unsupported version!\n"); in imx_audmux_probe()
306 return -EINVAL; in imx_audmux_probe()
309 regcache = devm_kzalloc(&pdev->dev, sizeof(u32) * reg_max, GFP_KERNEL); in imx_audmux_probe()
311 return -ENOMEM; in imx_audmux_probe()
313 imx_audmux_parse_dt_defaults(pdev, pdev->dev.of_node); in imx_audmux_probe()
380 MODULE_DESCRIPTION("Freescale i.MX AUDMUX driver");