return orientation;
}
-static int ipu_bridge_parse_ssdb(struct acpi_device *adev,
- struct ipu_sensor *sensor)
+int ipu_bridge_parse_ssdb(struct acpi_device *adev, struct ipu_sensor *sensor)
{
struct ipu_sensor_ssdb ssdb = {};
int ret;
return 0;
}
+EXPORT_SYMBOL_NS_GPL(ipu_bridge_parse_ssdb, INTEL_IPU_BRIDGE);
static void ipu_bridge_create_fwnode_properties(
struct ipu_sensor *sensor,
sensor = &bridge->sensors[bridge->n_sensors];
- ret = ipu_bridge_parse_ssdb(adev, sensor);
+ ret = bridge->parse_sensor_fwnode(adev, sensor);
if (ret)
goto err_put_adev;
return ready;
}
-int ipu_bridge_init(struct device *dev)
+int ipu_bridge_init(struct device *dev,
+ ipu_parse_sensor_fwnode_t parse_sensor_fwnode)
{
struct fwnode_handle *fwnode;
struct ipu_bridge *bridge;
sizeof(bridge->ipu_node_name));
bridge->ipu_hid_node.name = bridge->ipu_node_name;
bridge->dev = dev;
+ bridge->parse_sensor_fwnode = parse_sensor_fwnode;
ret = software_node_register(&bridge->ipu_hid_node);
if (ret < 0) {
struct software_node_ref_args vcm_ref[1];
};
+typedef int (*ipu_parse_sensor_fwnode_t)(struct acpi_device *adev,
+ struct ipu_sensor *sensor);
+
struct ipu_bridge {
struct device *dev;
+ ipu_parse_sensor_fwnode_t parse_sensor_fwnode;
char ipu_node_name[ACPI_ID_LEN];
struct software_node ipu_hid_node;
u32 data_lanes[4];
};
#if IS_ENABLED(CONFIG_IPU_BRIDGE)
-int ipu_bridge_init(struct device *dev);
+int ipu_bridge_init(struct device *dev,
+ ipu_parse_sensor_fwnode_t parse_sensor_fwnode);
+int ipu_bridge_parse_ssdb(struct acpi_device *adev, struct ipu_sensor *sensor);
#else
-static inline int ipu_bridge_init(struct device *dev) { return 0; }
+/* Use a define to avoid the @parse_sensor_fwnode argument getting evaluated */
+#define ipu_bridge_init(dev, parse_sensor_fwnode) (0)
#endif
#endif