Lines Matching refs:mic

110 static void mic_set_path(struct exynos_mic *mic, bool enable)  in mic_set_path()  argument
115 ret = regmap_read(mic->sysreg, DSD_CFG_MUX, &val); in mic_set_path()
122 if (mic->i80_mode) in mic_set_path()
131 regmap_write(mic->sysreg, DSD_CFG_MUX, val); in mic_set_path()
136 static int mic_sw_reset(struct exynos_mic *mic) in mic_sw_reset() argument
141 writel(MIC_SW_RST, mic->reg + MIC_OP); in mic_sw_reset()
144 ret = readl(mic->reg + MIC_OP); in mic_sw_reset()
154 static void mic_set_porch_timing(struct exynos_mic *mic) in mic_set_porch_timing() argument
156 struct videomode vm = mic->vm; in mic_set_porch_timing()
162 writel(reg, mic->reg + MIC_V_TIMING_0); in mic_set_porch_timing()
166 writel(reg, mic->reg + MIC_V_TIMING_1); in mic_set_porch_timing()
171 writel(reg, mic->reg + MIC_INPUT_TIMING_0); in mic_set_porch_timing()
175 writel(reg, mic->reg + MIC_INPUT_TIMING_1); in mic_set_porch_timing()
178 static void mic_set_img_size(struct exynos_mic *mic) in mic_set_img_size() argument
180 struct videomode *vm = &mic->vm; in mic_set_img_size()
186 writel(reg, mic->reg + MIC_IMG_SIZE); in mic_set_img_size()
189 static void mic_set_output_timing(struct exynos_mic *mic) in mic_set_output_timing() argument
191 struct videomode vm = mic->vm; in mic_set_output_timing()
197 writel(reg, mic->reg + MIC_2D_OUTPUT_TIMING_2); in mic_set_output_timing()
199 if (!mic->i80_mode) { in mic_set_output_timing()
203 writel(reg, mic->reg + MIC_2D_OUTPUT_TIMING_0); in mic_set_output_timing()
207 writel(reg, mic->reg + MIC_2D_OUTPUT_TIMING_1); in mic_set_output_timing()
211 static void mic_set_reg_on(struct exynos_mic *mic, bool enable) in mic_set_reg_on() argument
213 u32 reg = readl(mic->reg + MIC_OP); in mic_set_reg_on()
220 if (mic->i80_mode) in mic_set_reg_on()
227 writel(reg, mic->reg + MIC_OP); in mic_set_reg_on()
253 static int parse_dt(struct exynos_mic *mic) in parse_dt() argument
264 remote_node = get_remote_node(mic->dev->of_node, i); in parse_dt()
276 mic->i80_mode = 1; in parse_dt()
289 &mic->vm, 0); in parse_dt()
313 struct exynos_mic *mic = bridge->driver_private; in mic_post_disable() local
317 if (!mic->enabled) in mic_post_disable()
320 mic_set_path(mic, 0); in mic_post_disable()
323 clk_disable_unprepare(mic->clks[i]); in mic_post_disable()
325 mic->enabled = 0; in mic_post_disable()
333 struct exynos_mic *mic = bridge->driver_private; in mic_pre_enable() local
337 if (mic->enabled) in mic_pre_enable()
341 ret = clk_prepare_enable(mic->clks[i]); in mic_pre_enable()
349 mic_set_path(mic, 1); in mic_pre_enable()
351 ret = mic_sw_reset(mic); in mic_pre_enable()
357 if (!mic->i80_mode) in mic_pre_enable()
358 mic_set_porch_timing(mic); in mic_pre_enable()
359 mic_set_img_size(mic); in mic_pre_enable()
360 mic_set_output_timing(mic); in mic_pre_enable()
361 mic_set_reg_on(mic, 1); in mic_pre_enable()
362 mic->enabled = 1; in mic_pre_enable()
369 clk_disable_unprepare(mic->clks[i]); in mic_pre_enable()
378 struct exynos_mic *mic = bridge->driver_private; in mic_destroy() local
382 if (!mic->enabled) in mic_destroy()
386 clk_disable_unprepare(mic->clks[i]); in mic_destroy()
402 struct exynos_mic *mic; in exynos_mic_probe() local
406 mic = devm_kzalloc(dev, sizeof(*mic), GFP_KERNEL); in exynos_mic_probe()
407 if (!mic) { in exynos_mic_probe()
413 mic->dev = dev; in exynos_mic_probe()
415 ret = parse_dt(mic); in exynos_mic_probe()
424 mic->reg = devm_ioremap(dev, res.start, resource_size(&res)); in exynos_mic_probe()
425 if (!mic->reg) { in exynos_mic_probe()
431 mic->sysreg = syscon_regmap_lookup_by_phandle(dev->of_node, in exynos_mic_probe()
433 if (IS_ERR(mic->sysreg)) { in exynos_mic_probe()
438 mic->bridge.funcs = &mic_bridge_funcs; in exynos_mic_probe()
439 mic->bridge.of_node = dev->of_node; in exynos_mic_probe()
440 mic->bridge.driver_private = mic; in exynos_mic_probe()
441 ret = drm_bridge_add(&mic->bridge); in exynos_mic_probe()
448 mic->clks[i] = of_clk_get_by_name(dev->of_node, clk_names[i]); in exynos_mic_probe()
449 if (IS_ERR(mic->clks[i])) { in exynos_mic_probe()
452 ret = PTR_ERR(mic->clks[i]); in exynos_mic_probe()
465 struct exynos_mic *mic = platform_get_drvdata(pdev); in exynos_mic_remove() local
468 drm_bridge_remove(&mic->bridge); in exynos_mic_remove()
471 clk_put(mic->clks[i]); in exynos_mic_remove()