static int csi_stream_on(struct fimc_is_device_csi *csi) { int ret = 0; u32 settle; BUG_ON(!csi); BUG_ON(!csi->sensor_cfg); s5pcsis_reset(csi->base_reg); settle = get_hsync_settle( csi->sensor_cfg, csi->sensor_cfgs, csi->image.window.width, csi->image.window.height, csi->image.framerate); info("[CSI:D:%d] settle(%dx%d@%d) = %d\n", csi->instance, csi->image.window.width, csi->image.window.height, csi->image.framerate, settle); s5pcsis_set_hsync_settle(csi->base_reg, settle); s5pcsis_set_params(csi->base_reg, &csi->image); s5pcsis_system_enable(csi->base_reg, true); s5pcsis_enable_interrupts(csi->base_reg, &csi->image, true); return ret; }
static int csi_stream_off(struct fimc_is_device_csi *csi) { BUG_ON(!csi); s5pcsis_enable_interrupts(csi->base_reg, &csi->image, false); s5pcsis_system_enable(csi->base_reg, false); return 0; }
static int csi_stream_off(struct fimc_is_device_csi *csi) { int ret = 0; unsigned long __iomem *base_reg; BUG_ON(!csi); base_reg = csi->base_reg; #if (FIMC_IS_CSI_VERSION == CSI_VERSION_0000_0000) s5pcsis_enable_interrupts(base_reg, &csi->image, false); /* lane total count = csi->lanes + 1 (CSI_DATA_LANES_1 is 0) */ s5pcsis_system_enable(base_reg, false, (csi->lanes + 1)); #else csi_hw_s_interrupt(base_reg, false); csi_hw_disable(base_reg); #endif return ret; }
static int csi_stream_on(struct fimc_is_device_csi *csi) { int ret = 0; u32 settle; unsigned long __iomem *base_reg; BUG_ON(!csi); BUG_ON(!csi->sensor_cfg); base_reg = csi->base_reg; settle = get_hsync_settle( csi->sensor_cfg, csi->sensor_cfgs, csi->image.window.width, csi->image.window.height, csi->image.framerate); minfo("[CSI:D] settle(%dx%d@%d) = %d, lane idx(%d)\n", csi, csi->image.window.width, csi->image.window.height, csi->image.framerate, settle, csi->lanes); #if (FIMC_IS_CSI_VERSION == CSI_VERSION_0000_0000) s5pcsis_reset(base_reg); s5pcsis_set_hsync_settle(base_reg, settle); s5pcsis_set_params(base_reg, &csi->image, csi->lanes); /* lane total count = csi->lanes + 1 (CSI_DATA_LANES_1 is 0) */ s5pcsis_system_enable(base_reg, true, (csi->lanes + 1)); s5pcsis_enable_interrupts(base_reg, &csi->image, true); #else csi_hw_reset(base_reg); csi_hw_s_settle(base_reg, settle); csi_hw_s_control(base_reg, csi->image.format.pixelformat, csi->mode, csi->lanes); if (csi->mode == CSI_MODE_CH0_ONLY) { csi_hw_s_config(base_reg, CSI_VIRTUAL_CH_0, CSI_VIRTUAL_CH_0, csi->image.format.pixelformat, csi->image.window.width, csi->image.window.height); } else { u32 index = get_vci_channel(csi->vci, csi->vcis, csi->image.format.pixelformat); csi_hw_s_config(base_reg, CSI_VIRTUAL_CH_0, csi->vci[index].vc_map[CSI_VIRTUAL_CH_0], csi->image.format.pixelformat, csi->image.window.width, csi->image.window.height); csi_hw_s_config(base_reg, CSI_VIRTUAL_CH_1, csi->vci[index].vc_map[CSI_VIRTUAL_CH_1], csi->image.format.pixelformat, csi->image.window.width, csi->image.window.height); csi_hw_s_config(base_reg, CSI_VIRTUAL_CH_2, csi->vci[index].vc_map[CSI_VIRTUAL_CH_2], csi->image.format.pixelformat, csi->image.window.width, csi->image.window.height); } csi_hw_s_interrupt(base_reg, true); csi_hw_enable(base_reg); #endif return ret; }