static int pwm_test_probe(struct platform_device *pdev) { struct pwm_test *pwm_test; pwm_test = devm_kzalloc(&pdev->dev, sizeof(*pwm_test), GFP_KERNEL); if (!pwm_test) { dev_err(&pdev->dev, "memory error\n"); return -ENOMEM; } if (pwm_test_class_init(&pdev->dev)) { dev_err(&pdev->dev, "sysfs creation failed\n"); return -EINVAL; } dev_set_drvdata(&pdev->dev, pwm_test); platform_set_drvdata(pdev, pwm_test); return 0; }
static int pwm_test_probe(struct platform_device *pdev) { struct pwm_test *pwm_test; struct pinctrl *pinctrl; struct device_node *node = (&pdev->dev)->of_node; int rc; pinctrl = devm_pinctrl_get_select_default(&pdev->dev); if (IS_ERR(pinctrl)) dev_warn(&pdev->dev, "unable to select pin group. PWM not muxed right\n"); pwm_test = devm_kzalloc(&pdev->dev, sizeof(*pwm_test), GFP_KERNEL); if (!pwm_test) { dev_err(&pdev->dev, "memory error\n"); return -ENOMEM; } if (pwm_test_class_init(&pdev->dev)) { dev_err(&pdev->dev, "sysfs creation failed\n"); return -EINVAL; } pwm_test->pwm = devm_pwm_get(&pdev->dev, NULL); if (IS_ERR(pwm_test->pwm)) { dev_err(&pdev->dev, "unable to request PWM\n"); return -EINVAL; } pwm_test->requested = 1; pr_debug("pwm_test got PWM\n"); /* Get the properties of the pwm. This is set in the device driver (tiehrpwm) */ pwm_test->period = pwm_get_period(pwm_test->pwm); /* Determine running or not from the device tree */ rc = of_property_read_u32(node, "enabled", (u32*) &(pwm_test->run)); if (rc < 0) return rc; if(pwm_test->run){ rc = pwm_enable(pwm_test->pwm); if (rc < 0) return rc; } /* Determine the duty from the device tree */ rc = of_property_read_u32(node, "duty", (u32*) &(pwm_test->duty_s)); if (rc < 0) return rc; rc = pwm_config(pwm_test->pwm, pwm_test->duty_s, pwm_test->period); if (rc) { pr_err("Unable to set pwm duty %d\n", rc); return rc; } platform_set_drvdata(pdev, pwm_test); return 0; }