diff --git a/drivers/media/platform/tegra/cdi/cdi_mgr.c b/drivers/media/platform/tegra/cdi/cdi_mgr.c index 59a0b20a..95227d3c 100644 --- a/drivers/media/platform/tegra/cdi/cdi_mgr.c +++ b/drivers/media/platform/tegra/cdi/cdi_mgr.c @@ -277,6 +277,7 @@ static int cdi_mgr_gpio_eq_intr_timer( struct cam_gpio_timer_queue *queue; u32 queue_cap; ktime_t timeout_abs; + struct cdi_mgr_gpio_intr event; if (!pin || !pin->mgr) return -EINVAL; @@ -293,6 +294,15 @@ static int cdi_mgr_gpio_eq_intr_timer( dev_err(cdi_mgr->dev, "%s: failed to enqueue interrupt timer, overflow\n", __func__); + + /* Report cdi-mgr fault */ + event.idx = pin->idx; + event.code = CDI_MGR_GPIO_INTR_FAULT; + if (cdi_mgr_gpio_eq_event(cdi_mgr, event) != 0) + dev_err(cdi_mgr->dev, + "%s: failed to enqueue cdi-mgr fault event, " + "idx %d\n", __func__, pin->idx); + return -ENOMEM; } diff --git a/include/uapi/media/cdi-mgr.h b/include/uapi/media/cdi-mgr.h index 701070a6..b5928a4a 100644 --- a/include/uapi/media/cdi-mgr.h +++ b/include/uapi/media/cdi-mgr.h @@ -78,6 +78,7 @@ enum { CDI_MGR_GPIO_INTR_UNBLOCK = 0, CDI_MGR_GPIO_INTR, CDI_MGR_GPIO_INTR_TIMEOUT, + CDI_MGR_GPIO_INTR_FAULT, }; enum {