axg-spdifout.c (4b4193256c8d3bc3a5397b5cd9494c2ad386317d) axg-spdifout.c (2ff4e003e8e105fb65c682c876a5cb0e00f854bf)
1// SPDX-License-Identifier: (GPL-2.0 OR MIT)
2//
3// Copyright (c) 2018 BayLibre, SAS.
4// Author: Jerome Brunet <jbrunet@baylibre.com>
5
6#include <linux/clk.h>
7#include <linux/module.h>
8#include <linux/of_platform.h>

--- 389 unchanged lines hidden (view full) ---

398};
399MODULE_DEVICE_TABLE(of, axg_spdifout_of_match);
400
401static int axg_spdifout_probe(struct platform_device *pdev)
402{
403 struct device *dev = &pdev->dev;
404 struct axg_spdifout *priv;
405 void __iomem *regs;
1// SPDX-License-Identifier: (GPL-2.0 OR MIT)
2//
3// Copyright (c) 2018 BayLibre, SAS.
4// Author: Jerome Brunet <jbrunet@baylibre.com>
5
6#include <linux/clk.h>
7#include <linux/module.h>
8#include <linux/of_platform.h>

--- 389 unchanged lines hidden (view full) ---

398};
399MODULE_DEVICE_TABLE(of, axg_spdifout_of_match);
400
401static int axg_spdifout_probe(struct platform_device *pdev)
402{
403 struct device *dev = &pdev->dev;
404 struct axg_spdifout *priv;
405 void __iomem *regs;
406 int ret;
407
408 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
409 if (!priv)
410 return -ENOMEM;
411 platform_set_drvdata(pdev, priv);
412
413 regs = devm_platform_ioremap_resource(pdev, 0);
414 if (IS_ERR(regs))
415 return PTR_ERR(regs);
416
417 priv->map = devm_regmap_init_mmio(dev, regs, &axg_spdifout_regmap_cfg);
418 if (IS_ERR(priv->map)) {
419 dev_err(dev, "failed to init regmap: %ld\n",
420 PTR_ERR(priv->map));
421 return PTR_ERR(priv->map);
422 }
423
424 priv->pclk = devm_clk_get(dev, "pclk");
406
407 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
408 if (!priv)
409 return -ENOMEM;
410 platform_set_drvdata(pdev, priv);
411
412 regs = devm_platform_ioremap_resource(pdev, 0);
413 if (IS_ERR(regs))
414 return PTR_ERR(regs);
415
416 priv->map = devm_regmap_init_mmio(dev, regs, &axg_spdifout_regmap_cfg);
417 if (IS_ERR(priv->map)) {
418 dev_err(dev, "failed to init regmap: %ld\n",
419 PTR_ERR(priv->map));
420 return PTR_ERR(priv->map);
421 }
422
423 priv->pclk = devm_clk_get(dev, "pclk");
425 if (IS_ERR(priv->pclk)) {
426 ret = PTR_ERR(priv->pclk);
427 if (ret != -EPROBE_DEFER)
428 dev_err(dev, "failed to get pclk: %d\n", ret);
429 return ret;
430 }
424 if (IS_ERR(priv->pclk))
425 return dev_err_probe(dev, PTR_ERR(priv->pclk), "failed to get pclk\n");
431
432 priv->mclk = devm_clk_get(dev, "mclk");
426
427 priv->mclk = devm_clk_get(dev, "mclk");
433 if (IS_ERR(priv->mclk)) {
434 ret = PTR_ERR(priv->mclk);
435 if (ret != -EPROBE_DEFER)
436 dev_err(dev, "failed to get mclk: %d\n", ret);
437 return ret;
438 }
428 if (IS_ERR(priv->mclk))
429 return dev_err_probe(dev, PTR_ERR(priv->mclk), "failed to get mclk\n");
439
440 return devm_snd_soc_register_component(dev, &axg_spdifout_component_drv,
441 axg_spdifout_dai_drv, ARRAY_SIZE(axg_spdifout_dai_drv));
442}
443
444static struct platform_driver axg_spdifout_pdrv = {
445 .probe = axg_spdifout_probe,
446 .driver = {
447 .name = "axg-spdifout",
448 .of_match_table = axg_spdifout_of_match,
449 },
450};
451module_platform_driver(axg_spdifout_pdrv);
452
453MODULE_DESCRIPTION("Amlogic AXG SPDIF Output driver");
454MODULE_AUTHOR("Jerome Brunet <jbrunet@baylibre.com>");
455MODULE_LICENSE("GPL v2");
430
431 return devm_snd_soc_register_component(dev, &axg_spdifout_component_drv,
432 axg_spdifout_dai_drv, ARRAY_SIZE(axg_spdifout_dai_drv));
433}
434
435static struct platform_driver axg_spdifout_pdrv = {
436 .probe = axg_spdifout_probe,
437 .driver = {
438 .name = "axg-spdifout",
439 .of_match_table = axg_spdifout_of_match,
440 },
441};
442module_platform_driver(axg_spdifout_pdrv);
443
444MODULE_DESCRIPTION("Amlogic AXG SPDIF Output driver");
445MODULE_AUTHOR("Jerome Brunet <jbrunet@baylibre.com>");
446MODULE_LICENSE("GPL v2");