mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-23 17:55:05 +03:00
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:
committed by
mobile promotions
parent
185c92d6dd
commit
3c67831fe8
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
|
||||
@@ -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__ */
|
||||
|
||||
Reference in New Issue
Block a user