mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-19 12:24:34 +08:00
media: intel/ipu6: Fix build with !ACPI
[ Upstream commit 8810e055b5
]
Modify the code so it can be compiled tested in configurations that do
not have ACPI enabled.
It fixes the following errors:
drivers/media/pci/intel/ipu-bridge.c:103:30: error: implicit declaration of function ‘acpi_device_handle’; did you mean ‘acpi_fwnode_handle’? [-Werror=implicit-function-declaration]
drivers/media/pci/intel/ipu-bridge.c:103:30: warning: initialization of ‘acpi_handle’ {aka ‘void *’} from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
drivers/media/pci/intel/ipu-bridge.c:110:17: error: implicit declaration of function ‘for_each_acpi_dev_match’ [-Werror=implicit-function-declaration]
drivers/media/pci/intel/ipu-bridge.c:110:74: error: expected ‘;’ before ‘for_each_acpi_consumer_dev’
drivers/media/pci/intel/ipu-bridge.c:104:29: warning: unused variable ‘consumer’ [-Wunused-variable]
drivers/media/pci/intel/ipu-bridge.c:103:21: warning: unused variable ‘handle’ [-Wunused-variable]
drivers/media/pci/intel/ipu-bridge.c:166:38: error: invalid use of undefined type ‘struct acpi_device’
drivers/media/pci/intel/ipu-bridge.c:185:43: error: invalid use of undefined type ‘struct acpi_device’
drivers/media/pci/intel/ipu-bridge.c:191:30: error: invalid use of undefined type ‘struct acpi_device’
drivers/media/pci/intel/ipu-bridge.c:196:30: error: invalid use of undefined type ‘struct acpi_device’
drivers/media/pci/intel/ipu-bridge.c:202:30: error: invalid use of undefined type ‘struct acpi_device’
drivers/media/pci/intel/ipu-bridge.c:223:31: error: invalid use of undefined type ‘struct acpi_device’
drivers/media/pci/intel/ipu-bridge.c:236:18: error: implicit declaration of function ‘acpi_get_physical_device_location’ [-Werror=implicit-function-declaration]
drivers/media/pci/intel/ipu-bridge.c:236:56: error: invalid use of undefined type ‘struct acpi_device’
drivers/media/pci/intel/ipu-bridge.c:238:31: error: invalid use of undefined type ‘struct acpi_device’
drivers/media/pci/intel/ipu-bridge.c:256:31: error: invalid use of undefined type ‘struct acpi_device’
drivers/media/pci/intel/ipu-bridge.c:275:31: error: invalid use of undefined type ‘struct acpi_device’
drivers/media/pci/intel/ipu-bridge.c:280:30: error: invalid use of undefined type ‘struct acpi_device’
drivers/media/pci/intel/ipu-bridge.c:469:26: error: implicit declaration of function ‘acpi_device_hid’; did you mean ‘dmi_device_id’? [-Werror=implicit-function-declaration]
drivers/media/pci/intel/ipu-bridge.c:468:74: warning: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘int’ [-Wformat=]
drivers/media/pci/intel/ipu-bridge.c:637:58: error: expected ‘;’ before ‘{’ token
drivers/media/pci/intel/ipu-bridge.c:696:1: warning: label ‘err_put_adev’ defined but not used [-Wunused-label]
drivers/media/pci/intel/ipu-bridge.c:693:1: warning: label ‘err_put_ivsc’ defined but not used [-Wunused-label]
drivers/media/pci/intel/ipu-bridge.c:691:1: warning: label ‘err_free_swnodes’ defined but not used [-Wunused-label]
drivers/media/pci/intel/ipu-bridge.c:632:40: warning: unused variable ‘primary’ [-Wunused-variable]
drivers/media/pci/intel/ipu-bridge.c:632:31: warning: unused variable ‘fwnode’ [-Wunused-variable]
drivers/media/pci/intel/ipu-bridge.c:733:73: error: expected ‘;’ before ‘{’ token
drivers/media/pci/intel/ipu-bridge.c:725:24: warning: unused variable ‘csi_dev’ [-Wunused-variable]
drivers/media/pci/intel/ipu-bridge.c:724:43: warning: unused variable ‘adev’ [-Wunused-variable]
drivers/media/pci/intel/ipu-bridge.c:599:12: warning: ‘ipu_bridge_instantiate_ivsc’ defined but not used [-Wunused-function]
drivers/media/pci/intel/ipu-bridge.c:444:13: warning: ‘ipu_bridge_create_connection_swnodes’ defined but not used [-Wunused-function]
drivers/media/pci/intel/ipu-bridge.c:297:13: warning: ‘ipu_bridge_create_fwnode_properties’ defined but not used [-Wunused-function]
drivers/media/pci/intel/ipu-bridge.c:155:12: warning: ‘ipu_bridge_check_ivsc_dev’ defined but not used [-Wunused-function]
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
3ad0034910
commit
23d3c898d5
@ -14,6 +14,8 @@
|
||||
#include <media/ipu-bridge.h>
|
||||
#include <media/v4l2-fwnode.h>
|
||||
|
||||
#define ADEV_DEV(adev) ACPI_PTR(&((adev)->dev))
|
||||
|
||||
/*
|
||||
* 92335fcf-3203-4472-af93-7b4453ac29da
|
||||
*
|
||||
@ -84,6 +86,7 @@ static const char * const ipu_vcm_types[] = {
|
||||
"lc898212axb",
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_ACPI)
|
||||
/*
|
||||
* Used to figure out IVSC acpi device by ipu_bridge_get_ivsc_acpi_dev()
|
||||
* instead of device and driver match to probe IVSC device.
|
||||
@ -97,13 +100,13 @@ static const struct acpi_device_id ivsc_acpi_ids[] = {
|
||||
|
||||
static struct acpi_device *ipu_bridge_get_ivsc_acpi_dev(struct acpi_device *adev)
|
||||
{
|
||||
acpi_handle handle = acpi_device_handle(adev);
|
||||
struct acpi_device *consumer, *ivsc_adev;
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ivsc_acpi_ids); i++) {
|
||||
const struct acpi_device_id *acpi_id = &ivsc_acpi_ids[i];
|
||||
struct acpi_device *consumer, *ivsc_adev;
|
||||
|
||||
acpi_handle handle = acpi_device_handle(adev);
|
||||
for_each_acpi_dev_match(ivsc_adev, acpi_id->id, NULL, -1)
|
||||
/* camera sensor depends on IVSC in DSDT if exist */
|
||||
for_each_acpi_consumer_dev(ivsc_adev, consumer)
|
||||
@ -115,6 +118,12 @@ static struct acpi_device *ipu_bridge_get_ivsc_acpi_dev(struct acpi_device *adev
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#else
|
||||
static struct acpi_device *ipu_bridge_get_ivsc_acpi_dev(struct acpi_device *adev)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int ipu_bridge_match_ivsc_dev(struct device *dev, const void *adev)
|
||||
{
|
||||
@ -160,7 +169,7 @@ static int ipu_bridge_check_ivsc_dev(struct ipu_sensor *sensor,
|
||||
csi_dev = ipu_bridge_get_ivsc_csi_dev(adev);
|
||||
if (!csi_dev) {
|
||||
acpi_dev_put(adev);
|
||||
dev_err(&adev->dev, "Failed to find MEI CSI dev\n");
|
||||
dev_err(ADEV_DEV(adev), "Failed to find MEI CSI dev\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
@ -179,24 +188,25 @@ static int ipu_bridge_read_acpi_buffer(struct acpi_device *adev, char *id,
|
||||
acpi_status status;
|
||||
int ret = 0;
|
||||
|
||||
status = acpi_evaluate_object(adev->handle, id, NULL, &buffer);
|
||||
status = acpi_evaluate_object(ACPI_PTR(adev->handle),
|
||||
id, NULL, &buffer);
|
||||
if (ACPI_FAILURE(status))
|
||||
return -ENODEV;
|
||||
|
||||
obj = buffer.pointer;
|
||||
if (!obj) {
|
||||
dev_err(&adev->dev, "Couldn't locate ACPI buffer\n");
|
||||
dev_err(ADEV_DEV(adev), "Couldn't locate ACPI buffer\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (obj->type != ACPI_TYPE_BUFFER) {
|
||||
dev_err(&adev->dev, "Not an ACPI buffer\n");
|
||||
dev_err(ADEV_DEV(adev), "Not an ACPI buffer\n");
|
||||
ret = -ENODEV;
|
||||
goto out_free_buff;
|
||||
}
|
||||
|
||||
if (obj->buffer.length > size) {
|
||||
dev_err(&adev->dev, "Given buffer is too small\n");
|
||||
dev_err(ADEV_DEV(adev), "Given buffer is too small\n");
|
||||
ret = -EINVAL;
|
||||
goto out_free_buff;
|
||||
}
|
||||
@ -217,7 +227,7 @@ static u32 ipu_bridge_parse_rotation(struct acpi_device *adev,
|
||||
case IPU_SENSOR_ROTATION_INVERTED:
|
||||
return 180;
|
||||
default:
|
||||
dev_warn(&adev->dev,
|
||||
dev_warn(ADEV_DEV(adev),
|
||||
"Unknown rotation %d. Assume 0 degree rotation\n",
|
||||
ssdb->degree);
|
||||
return 0;
|
||||
@ -227,12 +237,14 @@ static u32 ipu_bridge_parse_rotation(struct acpi_device *adev,
|
||||
static enum v4l2_fwnode_orientation ipu_bridge_parse_orientation(struct acpi_device *adev)
|
||||
{
|
||||
enum v4l2_fwnode_orientation orientation;
|
||||
struct acpi_pld_info *pld;
|
||||
acpi_status status;
|
||||
struct acpi_pld_info *pld = NULL;
|
||||
acpi_status status = AE_ERROR;
|
||||
|
||||
#if IS_ENABLED(CONFIG_ACPI)
|
||||
status = acpi_get_physical_device_location(adev->handle, &pld);
|
||||
#endif
|
||||
if (ACPI_FAILURE(status)) {
|
||||
dev_warn(&adev->dev, "_PLD call failed, using default orientation\n");
|
||||
dev_warn(ADEV_DEV(adev), "_PLD call failed, using default orientation\n");
|
||||
return V4L2_FWNODE_ORIENTATION_EXTERNAL;
|
||||
}
|
||||
|
||||
@ -250,7 +262,8 @@ static enum v4l2_fwnode_orientation ipu_bridge_parse_orientation(struct acpi_dev
|
||||
orientation = V4L2_FWNODE_ORIENTATION_EXTERNAL;
|
||||
break;
|
||||
default:
|
||||
dev_warn(&adev->dev, "Unknown _PLD panel val %d\n", pld->panel);
|
||||
dev_warn(ADEV_DEV(adev), "Unknown _PLD panel val %d\n",
|
||||
pld->panel);
|
||||
orientation = V4L2_FWNODE_ORIENTATION_EXTERNAL;
|
||||
break;
|
||||
}
|
||||
@ -269,12 +282,12 @@ int ipu_bridge_parse_ssdb(struct acpi_device *adev, struct ipu_sensor *sensor)
|
||||
return ret;
|
||||
|
||||
if (ssdb.vcmtype > ARRAY_SIZE(ipu_vcm_types)) {
|
||||
dev_warn(&adev->dev, "Unknown VCM type %d\n", ssdb.vcmtype);
|
||||
dev_warn(ADEV_DEV(adev), "Unknown VCM type %d\n", ssdb.vcmtype);
|
||||
ssdb.vcmtype = 0;
|
||||
}
|
||||
|
||||
if (ssdb.lanes > IPU_MAX_LANES) {
|
||||
dev_err(&adev->dev, "Number of lanes in SSDB is invalid\n");
|
||||
dev_err(ADEV_DEV(adev), "Number of lanes in SSDB is invalid\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@ -462,8 +475,14 @@ static void ipu_bridge_create_connection_swnodes(struct ipu_bridge *bridge,
|
||||
sensor->ipu_properties);
|
||||
|
||||
if (sensor->csi_dev) {
|
||||
const char *device_hid = "";
|
||||
|
||||
#if IS_ENABLED(CONFIG_ACPI)
|
||||
device_hid = acpi_device_hid(sensor->ivsc_adev);
|
||||
#endif
|
||||
|
||||
snprintf(sensor->ivsc_name, sizeof(sensor->ivsc_name), "%s-%u",
|
||||
acpi_device_hid(sensor->ivsc_adev), sensor->link);
|
||||
device_hid, sensor->link);
|
||||
|
||||
nodes[SWNODE_IVSC_HID] = NODE_SENSOR(sensor->ivsc_name,
|
||||
sensor->ivsc_properties);
|
||||
@ -628,11 +647,15 @@ static int ipu_bridge_connect_sensor(const struct ipu_sensor_config *cfg,
|
||||
{
|
||||
struct fwnode_handle *fwnode, *primary;
|
||||
struct ipu_sensor *sensor;
|
||||
struct acpi_device *adev;
|
||||
struct acpi_device *adev = NULL;
|
||||
int ret;
|
||||
|
||||
#if IS_ENABLED(CONFIG_ACPI)
|
||||
for_each_acpi_dev_match(adev, cfg->hid, NULL, -1) {
|
||||
if (!adev->status.enabled)
|
||||
#else
|
||||
while (true) {
|
||||
#endif
|
||||
if (!ACPI_PTR(adev->status.enabled))
|
||||
continue;
|
||||
|
||||
if (bridge->n_sensors >= IPU_MAX_PORTS) {
|
||||
@ -668,7 +691,7 @@ static int ipu_bridge_connect_sensor(const struct ipu_sensor_config *cfg,
|
||||
goto err_free_swnodes;
|
||||
}
|
||||
|
||||
sensor->adev = acpi_dev_get(adev);
|
||||
sensor->adev = ACPI_PTR(acpi_dev_get(adev));
|
||||
|
||||
primary = acpi_fwnode_handle(adev);
|
||||
primary->secondary = fwnode;
|
||||
@ -724,11 +747,16 @@ static int ipu_bridge_ivsc_is_ready(void)
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ipu_supported_sensors); i++) {
|
||||
#if IS_ENABLED(CONFIG_ACPI)
|
||||
const struct ipu_sensor_config *cfg =
|
||||
&ipu_supported_sensors[i];
|
||||
|
||||
for_each_acpi_dev_match(sensor_adev, cfg->hid, NULL, -1) {
|
||||
if (!sensor_adev->status.enabled)
|
||||
#else
|
||||
while (true) {
|
||||
sensor_adev = NULL;
|
||||
#endif
|
||||
if (!ACPI_PTR(sensor_adev->status.enabled))
|
||||
continue;
|
||||
|
||||
adev = ipu_bridge_get_ivsc_acpi_dev(sensor_adev);
|
||||
|
Loading…
Reference in New Issue
Block a user