Lines Matching refs:formatter
13 #include "axg-tdm-formatter.h"
80 static int axg_tdm_formatter_enable(struct axg_tdm_formatter *formatter)
82 struct axg_tdm_stream *ts = formatter->stream;
86 /* Do nothing if the formatter is already enabled */
87 if (formatter->enabled)
97 * and the formatter simply starts on the lane it stopped
104 ret = reset_control_reset(formatter->reset);
111 * invert it before the formatter.
114 ret = clk_set_phase(formatter->sclk, invert ? 0 : 180);
118 /* Setup the stream parameter in the formatter */
119 ret = formatter->drv->ops->prepare(formatter->map,
120 formatter->drv->quirks,
121 formatter->stream);
125 /* Enable the signal clocks feeding the formatter */
126 ret = clk_prepare_enable(formatter->sclk);
130 ret = clk_prepare_enable(formatter->lrclk);
132 clk_disable_unprepare(formatter->sclk);
136 /* Finally, actually enable the formatter */
137 formatter->drv->ops->enable(formatter->map);
138 formatter->enabled = true;
143 static void axg_tdm_formatter_disable(struct axg_tdm_formatter *formatter)
145 /* Do nothing if the formatter is already disabled */
146 if (!formatter->enabled)
149 formatter->drv->ops->disable(formatter->map);
150 clk_disable_unprepare(formatter->lrclk);
151 clk_disable_unprepare(formatter->sclk);
152 formatter->enabled = false;
155 static int axg_tdm_formatter_attach(struct axg_tdm_formatter *formatter)
157 struct axg_tdm_stream *ts = formatter->stream;
164 ret = axg_tdm_formatter_enable(formatter);
166 pr_err("failed to enable formatter\n");
171 list_add_tail(&formatter->list, &ts->formatter_list);
177 static void axg_tdm_formatter_dettach(struct axg_tdm_formatter *formatter)
179 struct axg_tdm_stream *ts = formatter->stream;
182 list_del(&formatter->list);
185 axg_tdm_formatter_disable(formatter);
188 static int axg_tdm_formatter_power_up(struct axg_tdm_formatter *formatter,
191 struct axg_tdm_stream *ts = formatter->drv->ops->get_stream(w);
203 ret = clk_prepare_enable(formatter->pclk);
208 ret = clk_set_parent(formatter->sclk_sel, ts->iface->sclk);
213 ret = clk_set_parent(formatter->lrclk_sel, ts->iface->lrclk);
217 formatter->stream = ts;
218 ret = axg_tdm_formatter_attach(formatter);
225 clk_disable_unprepare(formatter->pclk);
229 static void axg_tdm_formatter_power_down(struct axg_tdm_formatter *formatter)
231 axg_tdm_formatter_dettach(formatter);
232 clk_disable_unprepare(formatter->pclk);
233 formatter->stream = NULL;
241 struct axg_tdm_formatter *formatter = snd_soc_component_get_drvdata(c);
246 ret = axg_tdm_formatter_power_up(formatter, w);
250 axg_tdm_formatter_power_down(formatter);
266 struct axg_tdm_formatter *formatter;
276 formatter = devm_kzalloc(dev, sizeof(*formatter), GFP_KERNEL);
277 if (!formatter)
279 platform_set_drvdata(pdev, formatter);
280 formatter->drv = drv;
286 formatter->map = devm_regmap_init_mmio(dev, regs, drv->regmap_cfg);
287 if (IS_ERR(formatter->map)) {
289 PTR_ERR(formatter->map));
290 return PTR_ERR(formatter->map);
294 formatter->pclk = devm_clk_get(dev, "pclk");
295 if (IS_ERR(formatter->pclk)) {
296 ret = PTR_ERR(formatter->pclk);
303 formatter->sclk = devm_clk_get(dev, "sclk");
304 if (IS_ERR(formatter->sclk)) {
305 ret = PTR_ERR(formatter->sclk);
312 formatter->lrclk = devm_clk_get(dev, "lrclk");
313 if (IS_ERR(formatter->lrclk)) {
314 ret = PTR_ERR(formatter->lrclk);
321 formatter->sclk_sel = devm_clk_get(dev, "sclk_sel");
322 if (IS_ERR(formatter->sclk_sel)) {
323 ret = PTR_ERR(formatter->sclk_sel);
330 formatter->lrclk_sel = devm_clk_get(dev, "lrclk_sel");
331 if (IS_ERR(formatter->lrclk_sel)) {
332 ret = PTR_ERR(formatter->lrclk_sel);
339 formatter->reset = devm_reset_control_get_optional_exclusive(dev, NULL);
340 if (IS_ERR(formatter->reset)) {
341 ret = PTR_ERR(formatter->reset);
354 struct axg_tdm_formatter *formatter;
361 list_for_each_entry(formatter, &ts->formatter_list, list) {
362 ret = axg_tdm_formatter_enable(formatter);
377 struct axg_tdm_formatter *formatter;
383 list_for_each_entry(formatter, &ts->formatter_list, list) {
384 axg_tdm_formatter_disable(formatter);
409 * If the list is not empty, it would mean that one of the formatter
419 MODULE_DESCRIPTION("Amlogic AXG TDM formatter driver");