Lines Matching +full:sama5d2 +full:- +full:flexcom
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Driver for Atmel Flexcom
19 #include <dt-bindings/mfd/atmel-flexcom.h>
39 struct device_node *np = pdev->dev.of_node; in atmel_flexcom_probe()
43 ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL); in atmel_flexcom_probe()
45 return -ENOMEM; in atmel_flexcom_probe()
49 err = of_property_read_u32(np, "atmel,flexcom-mode", &ddata->opmode); in atmel_flexcom_probe()
53 if (ddata->opmode < ATMEL_FLEXCOM_MODE_USART || in atmel_flexcom_probe()
54 ddata->opmode > ATMEL_FLEXCOM_MODE_TWI) in atmel_flexcom_probe()
55 return -EINVAL; in atmel_flexcom_probe()
57 ddata->base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL); in atmel_flexcom_probe()
58 if (IS_ERR(ddata->base)) in atmel_flexcom_probe()
59 return PTR_ERR(ddata->base); in atmel_flexcom_probe()
61 ddata->clk = devm_clk_get(&pdev->dev, NULL); in atmel_flexcom_probe()
62 if (IS_ERR(ddata->clk)) in atmel_flexcom_probe()
63 return PTR_ERR(ddata->clk); in atmel_flexcom_probe()
65 err = clk_prepare_enable(ddata->clk); in atmel_flexcom_probe()
73 * Flexcom are muxed to reach the selected device. in atmel_flexcom_probe()
75 writel(FLEX_MR_OPMODE(ddata->opmode), ddata->base + FLEX_MR); in atmel_flexcom_probe()
77 clk_disable_unprepare(ddata->clk); in atmel_flexcom_probe()
79 return devm_of_platform_populate(&pdev->dev); in atmel_flexcom_probe()
83 { .compatible = "atmel,sama5d2-flexcom" },
94 err = clk_prepare_enable(ddata->clk); in atmel_flexcom_resume_noirq()
98 val = FLEX_MR_OPMODE(ddata->opmode); in atmel_flexcom_resume_noirq()
99 writel(val, ddata->base + FLEX_MR); in atmel_flexcom_resume_noirq()
101 clk_disable_unprepare(ddata->clk); in atmel_flexcom_resume_noirq()
122 MODULE_DESCRIPTION("Atmel Flexcom MFD driver");