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 += 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
|
|
||||||
|
|
||||||
|
|||||||
@@ -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++) {
|
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]);
|
||||||
goto mcdi_ctrl_err;
|
goto mcdi_ctrl_err;
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -340,37 +340,21 @@ 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_package pkg;
|
||||||
struct isc_dev_package32 pkg32;
|
|
||||||
|
|
||||||
if (copy_from_user(&pkg32,
|
if (copy_from_user(&pkg,
|
||||||
(const void __user *)arg, sizeof(pkg32))) {
|
(const void __user *)arg, sizeof(pkg))) {
|
||||||
dev_err(info->dev, "%s copy_from_user err line %d\n",
|
dev_err(info->dev, "%s copy_from_user err line %d\n",
|
||||||
__func__, __LINE__);
|
__func__, __LINE__);
|
||||||
return -EFAULT;
|
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;
|
|
||||||
}
|
}
|
||||||
|
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) {
|
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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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++) {
|
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]);
|
||||||
goto misc_ctrl_err;
|
goto misc_ctrl_err;
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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__ */
|
||||||
|
|||||||
Reference in New Issue
Block a user