#include <linux/acpi.h>
#include <linux/clk.h>
#include <linux/device.h>
#include <linux/dmi.h>
#include <linux/property.h>
#include <media/ipu-bridge.h>
#include <media/v4l2-fwnode.h>
#include "atomisp_cmd.h"
#include "atomisp_csi2.h"
#include "atomisp_internal.h"
#define PMC_CLK_RATE_19_2MHZ …
static const guid_t intel_sensor_gpio_info_guid = …;
#define INTEL_GPIO_DSM_TYPE_SHIFT …
#define INTEL_GPIO_DSM_TYPE_MASK …
#define INTEL_GPIO_DSM_PIN_SHIFT …
#define INTEL_GPIO_DSM_PIN_MASK …
#define INTEL_GPIO_DSM_SENSOR_ON_VAL_SHIFT …
#define INTEL_GPIO_DSM_SENSOR_ON_VAL_MASK …
#define INTEL_GPIO_DSM_TYPE(x) …
#define INTEL_GPIO_DSM_PIN(x) …
#define INTEL_GPIO_DSM_SENSOR_ON_VAL(x) …
static const guid_t intel_sensor_module_guid = …;
static const guid_t atomisp_dsm_guid = …;
static const guid_t vcm_dsm_guid = …;
struct atomisp_sensor_config { … };
#define ATOMISP_SENSOR_CONFIG(_HID, _LANES, _VCM) …
struct gmin_cfg_var { … };
static struct gmin_cfg_var lenovo_ideapad_miix_310_vars[] = …;
static struct gmin_cfg_var xiaomi_mipad2_vars[] = …;
static const struct dmi_system_id gmin_cfg_dmi_overrides[] = …;
static char *gmin_cfg_get_dsm(struct acpi_device *adev, const char *key)
{ … }
static char *gmin_cfg_get_dmi_override(struct acpi_device *adev, const char *key)
{ … }
static char *gmin_cfg_get(struct acpi_device *adev, const char *key)
{ … }
static int gmin_cfg_get_int(struct acpi_device *adev, const char *key, int default_val)
{ … }
static int atomisp_csi2_get_pmc_clk_nr_from_acpi_pr0(struct acpi_device *adev)
{ … }
static int atomisp_csi2_set_pmc_clk_freq(struct acpi_device *adev, int clock_num)
{ … }
static int atomisp_csi2_get_port(struct acpi_device *adev, int clock_num)
{ … }
static int atomisp_csi2_handle_acpi_gpio_res(struct acpi_resource *ares, void *_data)
{ … }
static int atomisp_csi2_add_gpio_mappings(struct acpi_device *adev)
{ … }
static char *atomisp_csi2_get_vcm_type(struct acpi_device *adev)
{ … }
static const struct acpi_device_id atomisp_sensor_configs[] = …;
static int atomisp_csi2_parse_sensor_fwnode(struct acpi_device *adev,
struct ipu_sensor *sensor)
{ … }
int atomisp_csi2_bridge_init(struct atomisp_device *isp)
{ … }
struct sensor_async_subdev { … };
#define to_sensor_asd(a) …
#define notifier_to_atomisp(n) …
static int atomisp_notifier_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd,
struct v4l2_async_connection *asd)
{ … }
static void atomisp_notifier_unbind(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd,
struct v4l2_async_connection *asd)
{ … }
static int atomisp_notifier_complete(struct v4l2_async_notifier *notifier)
{ … }
static const struct v4l2_async_notifier_operations atomisp_async_ops = …;
int atomisp_csi2_bridge_parse_firmware(struct atomisp_device *isp)
{ … }