aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pwm/pwm-imx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pwm/pwm-imx.c')
-rw-r--r--drivers/pwm/pwm-imx.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/pwm/pwm-imx.c b/drivers/pwm/pwm-imx.c
index bb64122a74be..c405cb777808 100644
--- a/drivers/pwm/pwm-imx.c
+++ b/drivers/pwm/pwm-imx.c
@@ -239,7 +239,14 @@ static void imx_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm)
239 clk_disable_unprepare(imx->clk_per); 239 clk_disable_unprepare(imx->clk_per);
240} 240}
241 241
242static const struct pwm_ops imx_pwm_ops = { 242static const struct pwm_ops imx_pwm_ops_v1 = {
243 .enable = imx_pwm_enable,
244 .disable = imx_pwm_disable,
245 .config = imx_pwm_config,
246 .owner = THIS_MODULE,
247};
248
249static const struct pwm_ops imx_pwm_ops_v2 = {
243 .enable = imx_pwm_enable, 250 .enable = imx_pwm_enable,
244 .disable = imx_pwm_disable, 251 .disable = imx_pwm_disable,
245 .config = imx_pwm_config, 252 .config = imx_pwm_config,
@@ -250,16 +257,19 @@ struct imx_pwm_data {
250 int (*config)(struct pwm_chip *chip, 257 int (*config)(struct pwm_chip *chip,
251 struct pwm_device *pwm, int duty_ns, int period_ns); 258 struct pwm_device *pwm, int duty_ns, int period_ns);
252 void (*set_enable)(struct pwm_chip *chip, bool enable); 259 void (*set_enable)(struct pwm_chip *chip, bool enable);
260 const struct pwm_ops *ops;
253}; 261};
254 262
255static struct imx_pwm_data imx_pwm_data_v1 = { 263static struct imx_pwm_data imx_pwm_data_v1 = {
256 .config = imx_pwm_config_v1, 264 .config = imx_pwm_config_v1,
257 .set_enable = imx_pwm_set_enable_v1, 265 .set_enable = imx_pwm_set_enable_v1,
266 .ops = &imx_pwm_ops_v1,
258}; 267};
259 268
260static struct imx_pwm_data imx_pwm_data_v2 = { 269static struct imx_pwm_data imx_pwm_data_v2 = {
261 .config = imx_pwm_config_v2, 270 .config = imx_pwm_config_v2,
262 .set_enable = imx_pwm_set_enable_v2, 271 .set_enable = imx_pwm_set_enable_v2,
272 .ops = &imx_pwm_ops_v2,
263}; 273};
264 274
265static const struct of_device_id imx_pwm_dt_ids[] = { 275static const struct of_device_id imx_pwm_dt_ids[] = {
@@ -281,6 +291,8 @@ static int imx_pwm_probe(struct platform_device *pdev)
281 if (!of_id) 291 if (!of_id)
282 return -ENODEV; 292 return -ENODEV;
283 293
294 data = of_id->data;
295
284 imx = devm_kzalloc(&pdev->dev, sizeof(*imx), GFP_KERNEL); 296 imx = devm_kzalloc(&pdev->dev, sizeof(*imx), GFP_KERNEL);
285 if (imx == NULL) 297 if (imx == NULL)
286 return -ENOMEM; 298 return -ENOMEM;
@@ -292,7 +304,7 @@ static int imx_pwm_probe(struct platform_device *pdev)
292 return PTR_ERR(imx->clk_per); 304 return PTR_ERR(imx->clk_per);
293 } 305 }
294 306
295 imx->chip.ops = &imx_pwm_ops; 307 imx->chip.ops = data->ops;
296 imx->chip.dev = &pdev->dev; 308 imx->chip.dev = &pdev->dev;
297 imx->chip.base = -1; 309 imx->chip.base = -1;
298 imx->chip.npwm = 1; 310 imx->chip.npwm = 1;
@@ -303,7 +315,6 @@ static int imx_pwm_probe(struct platform_device *pdev)
303 if (IS_ERR(imx->mmio_base)) 315 if (IS_ERR(imx->mmio_base))
304 return PTR_ERR(imx->mmio_base); 316 return PTR_ERR(imx->mmio_base);
305 317
306 data = of_id->data;
307 imx->config = data->config; 318 imx->config = data->config;
308 imx->set_enable = data->set_enable; 319 imx->set_enable = data->set_enable;
309 320