mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 17:25:35 +03:00
media: camera: Fix build for Linux v6.10
In Linux v6.10, a pointer to a dynamically allocated 'struct device' was replaced with a statically allocated 'struct device' in the 'pwm_chip' structure. Update the Tegra camera drivers accordingly to fix the build for Linux v6.10. Bug 4593750 Change-Id: I05e15e2a63383ab2f96be6c20e81705de9581869 Signed-off-by: Jon Hunter <jonathanh@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3123220 GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com> Reviewed-by: Brad Griffis <bgriffis@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
0104837e60
commit
1b72d87cce
@@ -1,11 +1,13 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
// Copyright (c) 2016-2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
/* SPDX-FileCopyrightText: Copyright (c) 2016-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. */
|
||||||
|
|
||||||
#ifndef __CDI_PWM_PRIV_H__
|
#ifndef __CDI_PWM_PRIV_H__
|
||||||
#define __CDI_PWM_PRIV_H__
|
#define __CDI_PWM_PRIV_H__
|
||||||
|
|
||||||
struct cdi_pwm_info {
|
struct cdi_pwm_info {
|
||||||
|
#if !defined(NV_PWM_CHIP_STRUCT_HAS_STRUCT_DEVICE)
|
||||||
struct pwm_chip chip;
|
struct pwm_chip chip;
|
||||||
|
#endif
|
||||||
struct pwm_device *pwm;
|
struct pwm_device *pwm;
|
||||||
atomic_t in_use;
|
atomic_t in_use;
|
||||||
struct mutex mutex;
|
struct mutex mutex;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
// Copyright (c) 2016-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
// SPDX-FileCopyrightText: Copyright (c) 2016-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||||
|
|
||||||
#include <nvidia/conftest.h>
|
#include <nvidia/conftest.h>
|
||||||
|
|
||||||
@@ -30,7 +30,11 @@ static const struct of_device_id cdi_pwm_of_match[] = {
|
|||||||
|
|
||||||
static inline struct cdi_pwm_info *to_cdi_pwm_info(struct pwm_chip *chip)
|
static inline struct cdi_pwm_info *to_cdi_pwm_info(struct pwm_chip *chip)
|
||||||
{
|
{
|
||||||
|
#if defined(NV_PWM_CHIP_STRUCT_HAS_STRUCT_DEVICE)
|
||||||
|
return pwmchip_get_drvdata(chip);
|
||||||
|
#else
|
||||||
return container_of(chip, struct cdi_pwm_info, chip);
|
return container_of(chip, struct cdi_pwm_info, chip);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if KERNEL_VERSION(6, 0, 0) > LINUX_VERSION_CODE
|
#if KERNEL_VERSION(6, 0, 0) > LINUX_VERSION_CODE
|
||||||
@@ -95,30 +99,35 @@ static struct pwm_device *of_cdi_pwm_xlate(struct pwm_chip *pc,
|
|||||||
{
|
{
|
||||||
struct pwm_device *pwm;
|
struct pwm_device *pwm;
|
||||||
struct cdi_pwm_info *info = to_cdi_pwm_info(pc);
|
struct cdi_pwm_info *info = to_cdi_pwm_info(pc);
|
||||||
|
#if defined(NV_PWM_CHIP_STRUCT_HAS_STRUCT_DEVICE)
|
||||||
|
struct device *dev = &pc->dev;
|
||||||
|
#else
|
||||||
|
struct device *dev = pc->dev;
|
||||||
|
#endif
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
pwm = pwm_request_from_chip(pc, args->args[0], NULL);
|
pwm = pwm_request_from_chip(pc, args->args[0], NULL);
|
||||||
if (!args->args[1]) {
|
if (!args->args[1]) {
|
||||||
dev_err(pc->dev, "Period should be larger than 0\n");
|
dev_err(dev, "Period should be larger than 0\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info->force_on) {
|
if (info->force_on) {
|
||||||
err = pwm_config(info->pwm, args->args[1]/4, args->args[1]);
|
err = pwm_config(info->pwm, args->args[1]/4, args->args[1]);
|
||||||
if (err) {
|
if (err) {
|
||||||
dev_err(pc->dev, "can't config PWM: %d\n", err);
|
dev_err(dev, "can't config PWM: %d\n", err);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = pwm_enable(info->pwm);
|
err = pwm_enable(info->pwm);
|
||||||
if (err) {
|
if (err) {
|
||||||
dev_err(pc->dev, "can't enable PWM: %d\n", err);
|
dev_err(dev, "can't enable PWM: %d\n", err);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
err = pwm_config(pwm, args->args[1]/4, args->args[1]);
|
err = pwm_config(pwm, args->args[1]/4, args->args[1]);
|
||||||
if (err) {
|
if (err) {
|
||||||
dev_err(pc->dev, "can't config PWM: %d\n", err);
|
dev_err(dev, "can't config PWM: %d\n", err);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -140,50 +149,60 @@ static const struct pwm_ops cdi_pwm_ops = {
|
|||||||
static int cdi_pwm_probe(struct platform_device *pdev)
|
static int cdi_pwm_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct cdi_pwm_info *info = NULL;
|
struct cdi_pwm_info *info = NULL;
|
||||||
|
struct pwm_chip *chip;
|
||||||
int err = 0, npwm;
|
int err = 0, npwm;
|
||||||
bool force_on = false;
|
bool force_on = false;
|
||||||
|
|
||||||
dev_info(&pdev->dev, "%sing...\n", __func__);
|
dev_info(&pdev->dev, "%sing...\n", __func__);
|
||||||
|
|
||||||
info = devm_kzalloc(
|
|
||||||
&pdev->dev, sizeof(struct cdi_pwm_info), GFP_KERNEL);
|
|
||||||
if (!info)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
atomic_set(&info->in_use, 0);
|
|
||||||
mutex_init(&info->mutex);
|
|
||||||
|
|
||||||
err = of_property_read_u32(pdev->dev.of_node, "npwm", &npwm);
|
err = of_property_read_u32(pdev->dev.of_node, "npwm", &npwm);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
dev_err(&pdev->dev, "npwm is not defined: %d\n", err);
|
dev_err(&pdev->dev, "npwm is not defined: %d\n", err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(NV_PWM_CHIP_STRUCT_HAS_STRUCT_DEVICE)
|
||||||
|
chip = devm_pwmchip_alloc(&pdev->dev, npwm, sizeof(*info));
|
||||||
|
if (IS_ERR(chip))
|
||||||
|
return PTR_ERR(chip);
|
||||||
|
info = to_cdi_pwm_info(chip);
|
||||||
|
#else
|
||||||
|
info = devm_kzalloc(
|
||||||
|
&pdev->dev, sizeof(struct cdi_pwm_info), GFP_KERNEL);
|
||||||
|
if (!info)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
chip = &info->chip;
|
||||||
|
chip->dev = &pdev->dev;
|
||||||
|
chip->npwm = npwm;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
atomic_set(&info->in_use, 0);
|
||||||
|
mutex_init(&info->mutex);
|
||||||
|
|
||||||
force_on = of_property_read_bool(pdev->dev.of_node, "force_on");
|
force_on = of_property_read_bool(pdev->dev.of_node, "force_on");
|
||||||
|
|
||||||
info->chip.dev = &pdev->dev;
|
chip->ops = &cdi_pwm_ops;
|
||||||
info->chip.ops = &cdi_pwm_ops;
|
|
||||||
#if defined(NV_PWM_CHIP_STRUCT_HAS_BASE_ARG)
|
#if defined(NV_PWM_CHIP_STRUCT_HAS_BASE_ARG)
|
||||||
info->chip.base = -1;
|
chip->base = -1;
|
||||||
#endif
|
#endif
|
||||||
info->chip.npwm = npwm;
|
chip->of_xlate = of_cdi_pwm_xlate;
|
||||||
info->chip.of_xlate = of_cdi_pwm_xlate;
|
|
||||||
info->force_on = force_on;
|
info->force_on = force_on;
|
||||||
|
|
||||||
err = pwmchip_add(&info->chip);
|
err = pwmchip_add(chip);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
dev_err(&pdev->dev, "pwmchip_add() failed: %d\n", err);
|
dev_err(&pdev->dev, "pwmchip_add() failed: %d\n", err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
platform_set_drvdata(pdev, info);
|
platform_set_drvdata(pdev, chip);
|
||||||
|
|
||||||
info->pwm = devm_pwm_get(&pdev->dev, NULL);
|
info->pwm = devm_pwm_get(&pdev->dev, NULL);
|
||||||
if (!IS_ERR(info->pwm)) {
|
if (!IS_ERR(info->pwm)) {
|
||||||
pwm_disable(info->pwm);
|
pwm_disable(info->pwm);
|
||||||
dev_info(&pdev->dev, "%s success to get PWM\n", __func__);
|
dev_info(&pdev->dev, "%s success to get PWM\n", __func__);
|
||||||
} else {
|
} else {
|
||||||
pwmchip_remove(&info->chip);
|
pwmchip_remove(chip);
|
||||||
err = PTR_ERR(info->pwm);
|
err = PTR_ERR(info->pwm);
|
||||||
if (err != -EPROBE_DEFER)
|
if (err != -EPROBE_DEFER)
|
||||||
dev_err(&pdev->dev,
|
dev_err(&pdev->dev,
|
||||||
@@ -195,24 +214,24 @@ static int cdi_pwm_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
static int cdi_pwm_remove(struct platform_device *pdev)
|
static int cdi_pwm_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct cdi_pwm_info *info = platform_get_drvdata(pdev);
|
struct pwm_chip *chip = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
pwmchip_remove(&info->chip);
|
pwmchip_remove(chip);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cdi_pwm_suspend(struct device *dev)
|
static int cdi_pwm_suspend(struct device *dev)
|
||||||
{
|
{
|
||||||
int err = 0;
|
struct pwm_chip *chip = dev_get_drvdata(dev);
|
||||||
struct cdi_pwm_info *info = dev_get_drvdata(dev);
|
struct cdi_pwm_info *info = to_cdi_pwm_info(chip);
|
||||||
|
|
||||||
if (info == NULL) {
|
if (info == NULL) {
|
||||||
dev_err(dev, "%s: fail to get info\n", __func__);
|
dev_err(dev, "%s: fail to get info\n", __func__);
|
||||||
} else {
|
} else {
|
||||||
if (!IS_ERR(info->pwm)) {
|
if (!IS_ERR(info->pwm)) {
|
||||||
pwm_disable(info->pwm);
|
pwm_disable(info->pwm);
|
||||||
err = pwm_config(info->pwm, PWM_SUSPEND_DUTY_RATIO,
|
pwm_config(info->pwm, PWM_SUSPEND_DUTY_RATIO,
|
||||||
PWM_SUSPEND_PERIOD);
|
PWM_SUSPEND_PERIOD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
/*
|
/* SPDX-FileCopyrightText: Copyright (c) 2016-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. */
|
||||||
* Copyright (c) 2016-2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __ISC_PWM_PRIV_H__
|
#ifndef __ISC_PWM_PRIV_H__
|
||||||
#define __ISC_PWM_PRIV_H__
|
#define __ISC_PWM_PRIV_H__
|
||||||
|
|
||||||
struct isc_pwm_info {
|
struct isc_pwm_info {
|
||||||
|
#if !defined(NV_PWM_CHIP_STRUCT_HAS_STRUCT_DEVICE)
|
||||||
struct pwm_chip chip;
|
struct pwm_chip chip;
|
||||||
|
#endif
|
||||||
struct pwm_device *pwm;
|
struct pwm_device *pwm;
|
||||||
atomic_t in_use;
|
atomic_t in_use;
|
||||||
struct mutex mutex;
|
struct mutex mutex;
|
||||||
|
|||||||
@@ -30,7 +30,11 @@ static const struct of_device_id isc_pwm_of_match[] = {
|
|||||||
|
|
||||||
static inline struct isc_pwm_info *to_isc_pwm_info(struct pwm_chip *chip)
|
static inline struct isc_pwm_info *to_isc_pwm_info(struct pwm_chip *chip)
|
||||||
{
|
{
|
||||||
|
#if defined(NV_PWM_CHIP_STRUCT_HAS_STRUCT_DEVICE)
|
||||||
|
return pwmchip_get_drvdata(chip);
|
||||||
|
#else
|
||||||
return container_of(chip, struct isc_pwm_info, chip);
|
return container_of(chip, struct isc_pwm_info, chip);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if KERNEL_VERSION(6, 0, 0) > LINUX_VERSION_CODE
|
#if KERNEL_VERSION(6, 0, 0) > LINUX_VERSION_CODE
|
||||||
@@ -95,30 +99,35 @@ static struct pwm_device *of_isc_pwm_xlate(struct pwm_chip *pc,
|
|||||||
{
|
{
|
||||||
struct pwm_device *pwm;
|
struct pwm_device *pwm;
|
||||||
struct isc_pwm_info *info = to_isc_pwm_info(pc);
|
struct isc_pwm_info *info = to_isc_pwm_info(pc);
|
||||||
|
#if defined(NV_PWM_CHIP_STRUCT_HAS_STRUCT_DEVICE)
|
||||||
|
struct device *dev = &pc->dev;
|
||||||
|
#else
|
||||||
|
struct device *dev = pc->dev;
|
||||||
|
#endif
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
pwm = pwm_request_from_chip(pc, args->args[0], NULL);
|
pwm = pwm_request_from_chip(pc, args->args[0], NULL);
|
||||||
if (!args->args[1]) {
|
if (!args->args[1]) {
|
||||||
dev_err(pc->dev, "Period should be larger than 0\n");
|
dev_err(dev, "Period should be larger than 0\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info->force_on) {
|
if (info->force_on) {
|
||||||
err = pwm_config(info->pwm, args->args[1]/4, args->args[1]);
|
err = pwm_config(info->pwm, args->args[1]/4, args->args[1]);
|
||||||
if (err) {
|
if (err) {
|
||||||
dev_err(pc->dev, "can't config PWM: %d\n", err);
|
dev_err(dev, "can't config PWM: %d\n", err);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = pwm_enable(info->pwm);
|
err = pwm_enable(info->pwm);
|
||||||
if (err) {
|
if (err) {
|
||||||
dev_err(pc->dev, "can't enable PWM: %d\n", err);
|
dev_err(dev, "can't enable PWM: %d\n", err);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
err = pwm_config(pwm, args->args[1]/4, args->args[1]);
|
err = pwm_config(pwm, args->args[1]/4, args->args[1]);
|
||||||
if (err) {
|
if (err) {
|
||||||
dev_err(pc->dev, "can't config PWM: %d\n", err);
|
dev_err(dev, "can't config PWM: %d\n", err);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -140,50 +149,60 @@ static const struct pwm_ops isc_pwm_ops = {
|
|||||||
static int isc_pwm_probe(struct platform_device *pdev)
|
static int isc_pwm_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct isc_pwm_info *info = NULL;
|
struct isc_pwm_info *info = NULL;
|
||||||
|
struct pwm_chip *chip;
|
||||||
int err = 0, npwm;
|
int err = 0, npwm;
|
||||||
bool force_on = false;
|
bool force_on = false;
|
||||||
|
|
||||||
dev_info(&pdev->dev, "%sing...\n", __func__);
|
dev_info(&pdev->dev, "%sing...\n", __func__);
|
||||||
|
|
||||||
info = devm_kzalloc(
|
|
||||||
&pdev->dev, sizeof(struct isc_pwm_info), GFP_KERNEL);
|
|
||||||
if (!info)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
atomic_set(&info->in_use, 0);
|
|
||||||
mutex_init(&info->mutex);
|
|
||||||
|
|
||||||
err = of_property_read_u32(pdev->dev.of_node, "npwm", &npwm);
|
err = of_property_read_u32(pdev->dev.of_node, "npwm", &npwm);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
dev_err(&pdev->dev, "npwm is not defined: %d\n", err);
|
dev_err(&pdev->dev, "npwm is not defined: %d\n", err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(NV_PWM_CHIP_STRUCT_HAS_STRUCT_DEVICE)
|
||||||
|
chip = devm_pwmchip_alloc(&pdev->dev, npwm, sizeof(*info));
|
||||||
|
if (IS_ERR(chip))
|
||||||
|
return PTR_ERR(chip);
|
||||||
|
info = to_isc_pwm_info(chip);
|
||||||
|
#else
|
||||||
|
info = devm_kzalloc(
|
||||||
|
&pdev->dev, sizeof(struct isc_pwm_info), GFP_KERNEL);
|
||||||
|
if (!info)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
chip = &info->chip;
|
||||||
|
chip->dev = &pdev->dev;
|
||||||
|
chip->npwm = npwm;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
atomic_set(&info->in_use, 0);
|
||||||
|
mutex_init(&info->mutex);
|
||||||
|
|
||||||
force_on = of_property_read_bool(pdev->dev.of_node, "force_on");
|
force_on = of_property_read_bool(pdev->dev.of_node, "force_on");
|
||||||
|
|
||||||
info->chip.dev = &pdev->dev;
|
chip->ops = &isc_pwm_ops;
|
||||||
info->chip.ops = &isc_pwm_ops;
|
|
||||||
#if defined(NV_PWM_CHIP_STRUCT_HAS_BASE_ARG)
|
#if defined(NV_PWM_CHIP_STRUCT_HAS_BASE_ARG)
|
||||||
info->chip.base = -1;
|
chip->base = -1;
|
||||||
#endif
|
#endif
|
||||||
info->chip.npwm = npwm;
|
chip->of_xlate = of_isc_pwm_xlate;
|
||||||
info->chip.of_xlate = of_isc_pwm_xlate;
|
|
||||||
info->force_on = force_on;
|
info->force_on = force_on;
|
||||||
|
|
||||||
err = pwmchip_add(&info->chip);
|
err = pwmchip_add(chip);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
dev_err(&pdev->dev, "pwmchip_add() failed: %d\n", err);
|
dev_err(&pdev->dev, "pwmchip_add() failed: %d\n", err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
platform_set_drvdata(pdev, info);
|
platform_set_drvdata(pdev, chip);
|
||||||
|
|
||||||
info->pwm = devm_pwm_get(&pdev->dev, NULL);
|
info->pwm = devm_pwm_get(&pdev->dev, NULL);
|
||||||
if (!IS_ERR(info->pwm)) {
|
if (!IS_ERR(info->pwm)) {
|
||||||
pwm_disable(info->pwm);
|
pwm_disable(info->pwm);
|
||||||
dev_info(&pdev->dev, "%s success to get PWM\n", __func__);
|
dev_info(&pdev->dev, "%s success to get PWM\n", __func__);
|
||||||
} else {
|
} else {
|
||||||
pwmchip_remove(&info->chip);
|
pwmchip_remove(chip);
|
||||||
err = PTR_ERR(info->pwm);
|
err = PTR_ERR(info->pwm);
|
||||||
if (err != -EPROBE_DEFER)
|
if (err != -EPROBE_DEFER)
|
||||||
dev_err(&pdev->dev,
|
dev_err(&pdev->dev,
|
||||||
@@ -195,24 +214,24 @@ static int isc_pwm_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
static int isc_pwm_remove(struct platform_device *pdev)
|
static int isc_pwm_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct isc_pwm_info *info = platform_get_drvdata(pdev);
|
struct pwm_chip *chip = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
pwmchip_remove(&info->chip);
|
pwmchip_remove(chip);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int isc_pwm_suspend(struct device *dev)
|
static int isc_pwm_suspend(struct device *dev)
|
||||||
{
|
{
|
||||||
int err = 0;
|
struct pwm_chip *chip = dev_get_drvdata(dev);
|
||||||
struct isc_pwm_info *info = dev_get_drvdata(dev);
|
struct isc_pwm_info *info = to_isc_pwm_info(chip);
|
||||||
|
|
||||||
if (info == NULL) {
|
if (info == NULL) {
|
||||||
dev_err(dev, "%s: fail to get info\n", __func__);
|
dev_err(dev, "%s: fail to get info\n", __func__);
|
||||||
} else {
|
} else {
|
||||||
if (!IS_ERR(info->pwm)) {
|
if (!IS_ERR(info->pwm)) {
|
||||||
pwm_disable(info->pwm);
|
pwm_disable(info->pwm);
|
||||||
err = pwm_config(info->pwm, PWM_SUSPEND_DUTY_RATIO,
|
pwm_config(info->pwm, PWM_SUSPEND_DUTY_RATIO,
|
||||||
PWM_SUSPEND_PERIOD);
|
PWM_SUSPEND_PERIOD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user