aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/intel/mipi_camera/chip.h
diff options
context:
space:
mode:
authorSugnan Prabhu S <sugnan.prabhu.s@intel.com>2020-07-02 13:02:23 +0530
committerSubrata Banik <subrata.banik@intel.com>2020-08-03 03:44:50 +0000
commit6d9f24383539bcd2d24a31054a41977e5d004c5e (patch)
treedce3a88158eaea3773311d4f606713e30ceba3e9 /src/drivers/intel/mipi_camera/chip.h
parente2f5fb254989398e7b8ed3e203928825ace4417c (diff)
drivers/intel/mipi_camera: Add reference counting for shared resources
This change updates the mipi_camera driver to handle shared power resource between multiple cameras. This is achieved by adding a guard variable and methods to manipulate the guard variable before calling the actual platform method which enables or disables the resource. PowerResource will call these guarded methods to enable or disable the resource. This protects the shared resource from being enabled or disabled multiple times while the other camera is using the resource. Example: Consider a platform where two cameras are sharing a GPIO resource 0xXX and both the cameras calls enable and disable guarded methods for this GPIO. Actual platform disable method for the GPIO is called only after the last camera using the GPIO calls DSBx method and RESx becomes 0. Scope (\_SB.PCI0) { Name (RESx, Zero) Method (ENBx, 0, Serialized) { If ((RESx == Zero)) { \_SB.PCI0.STXS (0xXX) } RESx++ } Method (DSBx, 0, Serialized) { If ((RESx > Zero)) { RESx-- } If ((RESx == Zero)) { \_SB.PCI0.CTXS (0xXX) } } } Change-Id: I1468459d5bbb2fb07bef4e0590c96dd4dbab0d9c Signed-off-by: Sugnan Prabhu S <sugnan.prabhu.s@intel.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/43003 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/drivers/intel/mipi_camera/chip.h')
-rw-r--r--src/drivers/intel/mipi_camera/chip.h26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/drivers/intel/mipi_camera/chip.h b/src/drivers/intel/mipi_camera/chip.h
index d133f7df86..d91e1e749d 100644
--- a/src/drivers/intel/mipi_camera/chip.h
+++ b/src/drivers/intel/mipi_camera/chip.h
@@ -13,6 +13,7 @@
#define MAX_CLK_CONFIGS 2
#define MAX_GPIO_CONFIGS 4
#define MAX_PWR_OPS 5
+#define MAX_GUARDED_RESOURCES 10
#define SEQ_OPS_CLK_ENABLE(ind, delay) \
{ .type = IMGCLK, .index = (ind), .action = ENABLE, .delay_ms = (delay) }
@@ -70,15 +71,36 @@ enum intel_power_action_type {
};
enum ctrl_type {
- IMGCLK = 1,
+ UNKNOWN_CTRL,
+ IMGCLK,
GPIO
};
enum action_type {
- ENABLE = 1,
+ UNKNOWN_ACTION,
+ ENABLE,
DISABLE
};
+struct camera_resource {
+ uint8_t type;
+ uint8_t id;
+};
+
+struct camera_resource_manager {
+ uint8_t cnt;
+ struct camera_resource resource[MAX_GUARDED_RESOURCES];
+};
+
+struct resource_config {
+ enum action_type action;
+ enum ctrl_type type;
+ union {
+ const struct clk_config *clk_conf;
+ const struct gpio_config *gpio_conf;
+ };
+};
+
struct clk_config {
/* IMGCLKOUT_x being used for a port */
uint8_t clknum;