media: camera: fix driver errors for kstable

Fix CDI and ISC driver errors when building for kstable (6.0.0)

Bug 3831575

Change-Id: Ie37be0dbe9c579ec396006fb466125b1e7e77e3f
Signed-off-by: Frank Chen <frankc@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2821524
Reviewed-by: Igor Mitsyanko <imitsyanko@nvidia.com>
Reviewed-by: Justin Kim (SW-TEGRA) <juskim@nvidia.com>
Reviewed-by: Shiva Dubey <sdubey@nvidia.com>
GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
Frank Chen
2022-12-02 19:05:09 -08:00
committed by mobile promotions
parent 185c92d6dd
commit 3c67831fe8
7 changed files with 33 additions and 85 deletions

View File

@@ -31,7 +31,5 @@ obj-m += thermal/
obj-m += watchdog/
obj-m += video/tegra/
obj-m += virt/tegra/
ifeq ($(shell test $$VERSION -lt 6; echo $$?),0)
obj-m += media/
endif

View File

@@ -666,9 +666,8 @@ static int cdi_mgr_mcdi_ctrl(struct cdi_mgr_priv *cdi_mgr, bool mcdi_on)
for (i = 0; i < pd->num_mcdi_gpios; i++) {
if (mcdi_on) {
if (devm_gpio_request(cdi_mgr->pdev,
pd->mcdi_gpios[i],
"mcdi-gpio")) {
if (gpio_request(pd->mcdi_gpios[i],
"mcdi-gpio")) {
dev_err(cdi_mgr->pdev, "failed req GPIO: %d\n",
pd->mcdi_gpios[i]);
goto mcdi_ctrl_err;
@@ -679,14 +678,14 @@ static int cdi_mgr_mcdi_ctrl(struct cdi_mgr_priv *cdi_mgr, bool mcdi_on)
} else {
err = gpio_direction_output(
pd->mcdi_gpios[i], PW_OFF(pd->mcdi_flags[i]));
devm_gpio_free(cdi_mgr->pdev, pd->mcdi_gpios[i]);
gpio_free(pd->mcdi_gpios[i]);
}
}
return 0;
mcdi_ctrl_err:
for (; i >= 0; i--)
devm_gpio_free(cdi_mgr->pdev, pd->mcdi_gpios[i]);
gpio_free(pd->mcdi_gpios[i]);
return -EBUSY;
}
@@ -1533,8 +1532,7 @@ static int cdi_mgr_probe(struct platform_device *pdev)
if (!gpio_is_valid(pd->pwr_gpios[i]))
goto err_probe;
if (devm_gpio_request(
&pdev->dev, pd->pwr_gpios[i], "pwdn-gpios")) {
if (gpio_request(pd->pwr_gpios[i], "pwdn-gpios")) {
dev_err(&pdev->dev, "failed to req GPIO: %d\n",
pd->pwr_gpios[i]);
goto err_probe;

View File

@@ -7,6 +7,7 @@
#include <linux/of_device.h>
#include <linux/pwm.h>
#include <linux/atomic.h>
#include <linux/version.h>
#include "cdi-pwm-priv.h"
@@ -30,6 +31,7 @@ static inline struct cdi_pwm_info *to_cdi_pwm_info(struct pwm_chip *chip)
return container_of(chip, struct cdi_pwm_info, chip);
}
#if KERNEL_VERSION(6, 0, 0) > LINUX_VERSION_CODE
static int cdi_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
{
struct cdi_pwm_info *info = to_cdi_pwm_info(chip);
@@ -84,6 +86,7 @@ static int cdi_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
return err;
}
#endif
static struct pwm_device *of_cdi_pwm_xlate(struct pwm_chip *pc,
const struct of_phandle_args *args)
@@ -122,9 +125,11 @@ static struct pwm_device *of_cdi_pwm_xlate(struct pwm_chip *pc,
}
static const struct pwm_ops cdi_pwm_ops = {
#if KERNEL_VERSION(6, 0, 0) > LINUX_VERSION_CODE
.config = cdi_pwm_config,
.enable = cdi_pwm_enable,
.disable = cdi_pwm_disable,
#endif
.owner = THIS_MODULE,
};

View File

@@ -340,37 +340,21 @@ static int isc_dev_raw_rw(struct isc_dev_info *info)
}
static int isc_dev_get_package(
struct isc_dev_info *info, unsigned long arg, bool is_compat)
struct isc_dev_info *info, unsigned long arg)
{
if (is_compat) {
struct isc_dev_package32 pkg32;
struct isc_dev_package pkg;
if (copy_from_user(&pkg32,
(const void __user *)arg, sizeof(pkg32))) {
dev_err(info->dev, "%s copy_from_user err line %d\n",
__func__, __LINE__);
return -EFAULT;
}
info->rw_pkg.offset = pkg32.offset;
info->rw_pkg.offset_len = pkg32.offset_len;
info->rw_pkg.size = pkg32.size;
info->rw_pkg.flags = pkg32.flags;
info->rw_pkg.buffer = (unsigned long)pkg32.buffer;
} else {
struct isc_dev_package pkg;
if (copy_from_user(&pkg,
(const void __user *)arg, sizeof(pkg))) {
dev_err(info->dev, "%s copy_from_user err line %d\n",
__func__, __LINE__);
return -EFAULT;
}
info->rw_pkg.offset = pkg.offset;
info->rw_pkg.offset_len = pkg.offset_len;
info->rw_pkg.size = pkg.size;
info->rw_pkg.flags = pkg.flags;
info->rw_pkg.buffer = pkg.buffer;
if (copy_from_user(&pkg,
(const void __user *)arg, sizeof(pkg))) {
dev_err(info->dev, "%s copy_from_user err line %d\n",
__func__, __LINE__);
return -EFAULT;
}
info->rw_pkg.offset = pkg.offset;
info->rw_pkg.offset_len = pkg.offset_len;
info->rw_pkg.size = pkg.size;
info->rw_pkg.flags = pkg.flags;
info->rw_pkg.buffer = pkg.buffer;
if ((void __user *)info->rw_pkg.buffer == NULL) {
dev_err(info->dev, "%s package buffer NULL\n", __func__);
@@ -394,7 +378,7 @@ static long isc_dev_ioctl(struct file *file,
switch (cmd) {
case ISC_DEV_IOCTL_RW:
err = isc_dev_get_package(info, arg, false);
err = isc_dev_get_package(info, arg);
if (err)
break;
@@ -408,29 +392,6 @@ static long isc_dev_ioctl(struct file *file,
return err;
}
#ifdef CONFIG_COMPAT
static long isc_dev_ioctl32(struct file *file,
unsigned int cmd, unsigned long arg)
{
struct isc_dev_info *info = file->private_data;
int err = 0;
switch (cmd) {
case ISC_DEV_IOCTL_RW32:
err = isc_dev_get_package(info, arg, true);
if (err)
break;
err = isc_dev_raw_rw(info);
break;
default:
return isc_dev_ioctl(file, cmd, arg);
}
return err;
}
#endif
static int isc_dev_open(struct inode *inode, struct file *file)
{
struct isc_dev_info *info;
@@ -462,9 +423,6 @@ static const struct file_operations isc_dev_fileops = {
.owner = THIS_MODULE,
.open = isc_dev_open,
.unlocked_ioctl = isc_dev_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = isc_dev_ioctl32,
#endif
.release = isc_dev_release,
};

View File

@@ -514,9 +514,8 @@ static int isc_mgr_misc_ctrl(struct isc_mgr_priv *isc_mgr, bool misc_on)
for (i = 0; i < pd->num_misc_gpios; i++) {
if (misc_on) {
if (devm_gpio_request(isc_mgr->pdev,
pd->misc_gpios[i],
"misc-gpio")) {
if (gpio_request(pd->misc_gpios[i],
"misc-gpio")) {
dev_err(isc_mgr->pdev, "failed req GPIO: %d\n",
pd->misc_gpios[i]);
goto misc_ctrl_err;
@@ -527,14 +526,14 @@ static int isc_mgr_misc_ctrl(struct isc_mgr_priv *isc_mgr, bool misc_on)
} else {
err = gpio_direction_output(
pd->misc_gpios[i], PW_OFF(pd->misc_flags[i]));
devm_gpio_free(isc_mgr->pdev, pd->misc_gpios[i]);
gpio_free(pd->misc_gpios[i]);
}
}
return 0;
misc_ctrl_err:
for (; i >= 0; i--)
devm_gpio_free(isc_mgr->pdev, pd->misc_gpios[i]);
gpio_free(pd->misc_gpios[i]);
return -EBUSY;
}
@@ -1057,8 +1056,7 @@ static int isc_mgr_probe(struct platform_device *pdev)
if (!gpio_is_valid(pd->pwr_gpios[i]))
goto err_probe;
if (devm_gpio_request(
&pdev->dev, pd->pwr_gpios[i], "pwdn-gpios")) {
if (gpio_request(pd->pwr_gpios[i], "pwdn-gpios")) {
dev_err(&pdev->dev, "failed to req GPIO: %d\n",
pd->pwr_gpios[i]);
goto err_probe;

View File

@@ -7,6 +7,7 @@
#include <linux/of_device.h>
#include <linux/pwm.h>
#include <linux/atomic.h>
#include <linux/version.h>
#include "isc-pwm-priv.h"
@@ -30,6 +31,7 @@ static inline struct isc_pwm_info *to_isc_pwm_info(struct pwm_chip *chip)
return container_of(chip, struct isc_pwm_info, chip);
}
#if KERNEL_VERSION(6, 0, 0) > LINUX_VERSION_CODE
static int isc_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
{
struct isc_pwm_info *info = to_isc_pwm_info(chip);
@@ -84,6 +86,7 @@ static int isc_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
return err;
}
#endif
static struct pwm_device *of_isc_pwm_xlate(struct pwm_chip *pc,
const struct of_phandle_args *args)
@@ -122,9 +125,11 @@ static struct pwm_device *of_isc_pwm_xlate(struct pwm_chip *pc,
}
static const struct pwm_ops isc_pwm_ops = {
#if KERNEL_VERSION(6, 0, 0) > LINUX_VERSION_CODE
.config = isc_pwm_config,
.enable = isc_pwm_enable,
.disable = isc_pwm_disable,
#endif
.owner = THIS_MODULE,
};

View File

@@ -21,18 +21,4 @@ struct __attribute__ ((__packed__)) isc_dev_package {
unsigned long buffer;
};
#ifdef __KERNEL__
#ifdef CONFIG_COMPAT
#define ISC_DEV_IOCTL_RW32 _IOW('o', 1, struct isc_dev_package32)
struct __attribute__ ((__packed__)) isc_dev_package32 {
__u16 offset;
__u16 offset_len;
__u32 size;
__u32 flags;
__u32 buffer;
};
#endif /* CONFIG_COMPAT */
#endif /* __KERNEL__ */
#endif /* __UAPI_ISC_DEV_H__ */