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 += watchdog/
obj-m += video/tegra/ obj-m += video/tegra/
obj-m += virt/tegra/ obj-m += virt/tegra/
ifeq ($(shell test $$VERSION -lt 6; echo $$?),0)
obj-m += media/ obj-m += media/
endif

View File

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

View File

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

View File

@@ -340,23 +340,8 @@ static int isc_dev_raw_rw(struct isc_dev_info *info)
} }
static int isc_dev_get_package( 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;
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; struct isc_dev_package pkg;
if (copy_from_user(&pkg, if (copy_from_user(&pkg,
@@ -370,7 +355,6 @@ static int isc_dev_get_package(
info->rw_pkg.size = pkg.size; info->rw_pkg.size = pkg.size;
info->rw_pkg.flags = pkg.flags; info->rw_pkg.flags = pkg.flags;
info->rw_pkg.buffer = pkg.buffer; info->rw_pkg.buffer = pkg.buffer;
}
if ((void __user *)info->rw_pkg.buffer == NULL) { if ((void __user *)info->rw_pkg.buffer == NULL) {
dev_err(info->dev, "%s package buffer NULL\n", __func__); dev_err(info->dev, "%s package buffer NULL\n", __func__);
@@ -394,7 +378,7 @@ static long isc_dev_ioctl(struct file *file,
switch (cmd) { switch (cmd) {
case ISC_DEV_IOCTL_RW: case ISC_DEV_IOCTL_RW:
err = isc_dev_get_package(info, arg, false); err = isc_dev_get_package(info, arg);
if (err) if (err)
break; break;
@@ -408,29 +392,6 @@ static long isc_dev_ioctl(struct file *file,
return err; 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) static int isc_dev_open(struct inode *inode, struct file *file)
{ {
struct isc_dev_info *info; struct isc_dev_info *info;
@@ -462,9 +423,6 @@ static const struct file_operations isc_dev_fileops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = isc_dev_open, .open = isc_dev_open,
.unlocked_ioctl = isc_dev_ioctl, .unlocked_ioctl = isc_dev_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = isc_dev_ioctl32,
#endif
.release = isc_dev_release, .release = isc_dev_release,
}; };

View File

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

View File

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

View File

@@ -21,18 +21,4 @@ struct __attribute__ ((__packed__)) isc_dev_package {
unsigned long buffer; 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__ */ #endif /* __UAPI_ISC_DEV_H__ */