Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion drivers/video/Kconfig.mcux_csi
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
config VIDEO_MCUX_CSI
bool "NXP MCUX CMOS Sensor Interface (CSI) driver"
default y
depends on HAS_MCUX_CSI
depends on DT_HAS_NXP_IMX_CSI_ENABLED

config VIDEO_MCUX_CSI_INIT_PRIORITY
Expand Down
71 changes: 20 additions & 51 deletions drivers/video/video_mcux_csi.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ struct video_mcux_csi_data {
csi_handle_t csi_handle;
struct k_fifo fifo_in;
struct k_fifo fifo_out;
uint32_t pixelformat;
struct k_poll_signal *signal;
};

Expand All @@ -50,8 +49,7 @@ static inline unsigned int video_pix_fmt_bpp(uint32_t pixelformat)
}
}

static void __frame_done_cb(CSI_Type *base, csi_handle_t *handle,
status_t status, void *user_data)
static void __frame_done_cb(CSI_Type *base, csi_handle_t *handle, status_t status, void *user_data)
{
struct video_mcux_csi_data *data = user_data;
const struct device *dev = data->dev;
Expand All @@ -66,8 +64,7 @@ static void __frame_done_cb(CSI_Type *base, csi_handle_t *handle,
return;
}

status = CSI_TransferGetFullBuffer(config->base, &(data->csi_handle),
&buffer_addr);
status = CSI_TransferGetFullBuffer(config->base, &(data->csi_handle), &buffer_addr);
if (status != kStatus_Success) {
result = VIDEO_BUF_ERROR;
goto done;
Expand Down Expand Up @@ -116,8 +113,7 @@ static void __frame_done_cb(CSI_Type *base, csi_handle_t *handle,
return;
}

static int video_mcux_csi_set_fmt(const struct device *dev,
enum video_endpoint_id ep,
static int video_mcux_csi_set_fmt(const struct device *dev, enum video_endpoint_id ep,
struct video_format *fmt)
{
const struct video_mcux_csi_config *config = dev->config;
Expand All @@ -129,7 +125,6 @@ static int video_mcux_csi_set_fmt(const struct device *dev,
return -EINVAL;
}

data->pixelformat = fmt->pixelformat;
data->csi_config.bytesPerPixel = bpp;
data->csi_config.linePitch_Bytes = fmt->pitch;
data->csi_config.polarityFlags = kCSI_HsyncActiveHigh | kCSI_DataLatchOnRisingEdge;
Expand All @@ -144,8 +139,7 @@ static int video_mcux_csi_set_fmt(const struct device *dev,
return -EIO;
}

ret = CSI_TransferCreateHandle(config->base, &data->csi_handle,
__frame_done_cb, data);
ret = CSI_TransferCreateHandle(config->base, &data->csi_handle, __frame_done_cb, data);
if (ret != kStatus_Success) {
return -EIO;
}
Expand All @@ -157,11 +151,9 @@ static int video_mcux_csi_set_fmt(const struct device *dev,
return 0;
}

static int video_mcux_csi_get_fmt(const struct device *dev,
enum video_endpoint_id ep,
static int video_mcux_csi_get_fmt(const struct device *dev, enum video_endpoint_id ep,
struct video_format *fmt)
{
struct video_mcux_csi_data *data = dev->data;
const struct video_mcux_csi_config *config = dev->config;

if (fmt == NULL || ep != VIDEO_EP_OUT) {
Expand All @@ -173,13 +165,7 @@ static int video_mcux_csi_get_fmt(const struct device *dev,
return video_mcux_csi_set_fmt(dev, ep, fmt);
}


fmt->pixelformat = data->pixelformat;
fmt->height = data->csi_config.height;
fmt->width = data->csi_config.width;
fmt->pitch = data->csi_config.linePitch_Bytes;

return 0;
return -EIO;
}

static int video_mcux_csi_stream_start(const struct device *dev)
Expand Down Expand Up @@ -218,10 +204,7 @@ static int video_mcux_csi_stream_stop(const struct device *dev)
return 0;
}


static int video_mcux_csi_flush(const struct device *dev,
enum video_endpoint_id ep,
bool cancel)
static int video_mcux_csi_flush(const struct device *dev, enum video_endpoint_id ep, bool cancel)
{
const struct video_mcux_csi_config *config = dev->config;
struct video_mcux_csi_data *data = dev->data;
Expand All @@ -237,25 +220,22 @@ static int video_mcux_csi_flush(const struct device *dev,
} else {
/* Flush driver output queue */
do {
ret = CSI_TransferGetFullBuffer(config->base,
&(data->csi_handle),
ret = CSI_TransferGetFullBuffer(config->base, &(data->csi_handle),
&buffer_addr);
} while (ret == kStatus_Success);

while ((vbuf = k_fifo_get(&data->fifo_in, K_NO_WAIT))) {
k_fifo_put(&data->fifo_out, vbuf);
if (IS_ENABLED(CONFIG_POLL) && data->signal) {
k_poll_signal_raise(data->signal,
VIDEO_BUF_ABORTED);
k_poll_signal_raise(data->signal, VIDEO_BUF_ABORTED);
}
}
}

return 0;
}

static int video_mcux_csi_enqueue(const struct device *dev,
enum video_endpoint_id ep,
static int video_mcux_csi_enqueue(const struct device *dev, enum video_endpoint_id ep,
struct video_buffer *vbuf)
{
const struct video_mcux_csi_config *config = dev->config;
Expand All @@ -281,10 +261,8 @@ static int video_mcux_csi_enqueue(const struct device *dev,
return 0;
}

static int video_mcux_csi_dequeue(const struct device *dev,
enum video_endpoint_id ep,
struct video_buffer **vbuf,
k_timeout_t timeout)
static int video_mcux_csi_dequeue(const struct device *dev, enum video_endpoint_id ep,
struct video_buffer **vbuf, k_timeout_t timeout)
{
struct video_mcux_csi_data *data = dev->data;

Expand All @@ -300,9 +278,7 @@ static int video_mcux_csi_dequeue(const struct device *dev,
return 0;
}

static inline int video_mcux_csi_set_ctrl(const struct device *dev,
unsigned int cid,
void *value)
static inline int video_mcux_csi_set_ctrl(const struct device *dev, unsigned int cid, void *value)
{
const struct video_mcux_csi_config *config = dev->config;
int ret = -ENOTSUP;
Expand All @@ -315,9 +291,7 @@ static inline int video_mcux_csi_set_ctrl(const struct device *dev,
return ret;
}

static inline int video_mcux_csi_get_ctrl(const struct device *dev,
unsigned int cid,
void *value)
static inline int video_mcux_csi_get_ctrl(const struct device *dev, unsigned int cid, void *value)
{
const struct video_mcux_csi_config *config = dev->config;
int ret = -ENOTSUP;
Expand All @@ -330,8 +304,7 @@ static inline int video_mcux_csi_get_ctrl(const struct device *dev,
return ret;
}

static int video_mcux_csi_get_caps(const struct device *dev,
enum video_endpoint_id ep,
static int video_mcux_csi_get_caps(const struct device *dev, enum video_endpoint_id ep,
struct video_caps *caps)
{
const struct video_mcux_csi_config *config = dev->config;
Expand Down Expand Up @@ -387,8 +360,7 @@ static int video_mcux_csi_init(const struct device *dev)
}

#ifdef CONFIG_POLL
static int video_mcux_csi_set_signal(const struct device *dev,
enum video_endpoint_id ep,
static int video_mcux_csi_set_signal(const struct device *dev, enum video_endpoint_id ep,
struct k_poll_signal *signal)
{
struct video_mcux_csi_data *data = dev->data;
Expand Down Expand Up @@ -434,8 +406,7 @@ static int video_mcux_csi_init_0(const struct device *dev)
{
struct video_mcux_csi_data *data = dev->data;

IRQ_CONNECT(DT_INST_IRQN(0), DT_INST_IRQ(0, priority),
video_mcux_csi_isr, NULL, 0);
IRQ_CONNECT(DT_INST_IRQN(0), DT_INST_IRQ(0, priority), video_mcux_csi_isr, NULL, 0);

irq_enable(DT_INST_IRQN(0));

Expand All @@ -449,9 +420,7 @@ static int video_mcux_csi_init_0(const struct device *dev)
* necessary since the clock to the camera is provided by the
* CSI peripheral.
*/
DEVICE_DT_INST_DEFINE(0, &video_mcux_csi_init_0,
NULL, &video_mcux_csi_data_0,
&video_mcux_csi_config_0,
POST_KERNEL, CONFIG_VIDEO_MCUX_CSI_INIT_PRIORITY,
&video_mcux_csi_driver_api);
DEVICE_DT_INST_DEFINE(0, &video_mcux_csi_init_0, NULL, &video_mcux_csi_data_0,
&video_mcux_csi_config_0, POST_KERNEL, CONFIG_VIDEO_MCUX_CSI_INIT_PRIORITY,
&video_mcux_csi_driver_api);
#endif
5 changes: 0 additions & 5 deletions modules/Kconfig.mcux
Original file line number Diff line number Diff line change
Expand Up @@ -282,11 +282,6 @@ config HAS_MCUX_SMC
help
Set if the SMC module is present in the SoC.

config HAS_MCUX_CSI
bool
help
Set if the CMOS Sensor Interface module is present in the SoC.

config HAS_MCUX_LPTMR
bool
help
Expand Down
5 changes: 0 additions & 5 deletions soc/nxp/imxrt/imxrt10xx/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@ config SOC_MIMXRT1051
select INIT_ARM_PLL
select HAS_MCUX_USDHC1
select HAS_MCUX_USDHC2
select HAS_MCUX_CSI
select HAS_MCUX_FLEXCAN

config SOC_MIMXRT1052
Expand All @@ -93,7 +92,6 @@ config SOC_MIMXRT1052
select INIT_ENET_PLL if NET_L2_ETHERNET && ETH_DRIVER
select HAS_MCUX_USDHC1
select HAS_MCUX_USDHC2
select HAS_MCUX_CSI
select HAS_MCUX_FLEXCAN
select HAS_MCUX_PWM
select HAS_MCUX_SRC
Expand All @@ -107,7 +105,6 @@ config SOC_MIMXRT1061
select INIT_ARM_PLL
select HAS_MCUX_USDHC1
select HAS_MCUX_USDHC2
select HAS_MCUX_CSI
select HAS_MCUX_FLEXCAN

config SOC_MIMXRT1062
Expand All @@ -124,7 +121,6 @@ config SOC_MIMXRT1062
select INIT_ENET_PLL if NET_L2_ETHERNET && ETH_DRIVER
select HAS_MCUX_USDHC1
select HAS_MCUX_USDHC2
select HAS_MCUX_CSI
select HAS_MCUX_FLEXCAN
select HAS_MCUX_I2S
select HAS_MCUX_ADC_ETC
Expand All @@ -146,6 +142,5 @@ config SOC_MIMXRT1064
select INIT_ENET_PLL if NET_L2_ETHERNET && ETH_DRIVER
select HAS_MCUX_USDHC1
select HAS_MCUX_USDHC2
select HAS_MCUX_CSI
select HAS_MCUX_FLEXCAN
select HAS_SWO