Skip to content

Commit

Permalink
drivers: video: apply the per-endpoint configuration filter
Browse files Browse the repository at this point in the history
Apply the semantics defined in <zephyr/drivers/video.h> for specifying
the endpoint so that the user can pass either the endpoint number either
a generic placeholder (_ANY or _OUT).

Signed-off-by: Josuah Demangeon <me@josuah.net>
  • Loading branch information
josuah committed May 21, 2024
1 parent 4c4a1ee commit 2bbfd19
Show file tree
Hide file tree
Showing 3 changed files with 145 additions and 14 deletions.
61 changes: 56 additions & 5 deletions drivers/video/video_mcux_csi.c
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,16 @@ static int video_mcux_csi_set_fmt(const struct device *dev, enum video_endpoint_
unsigned int bpp = video_pix_fmt_bpp(fmt->pixelformat);
status_t ret;

if (!bpp || ep != VIDEO_EP_ANY_OUT) {
switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

if (!bpp) {
return -EINVAL;
}

Expand Down Expand Up @@ -156,7 +165,16 @@ static int video_mcux_csi_get_fmt(const struct device *dev, enum video_endpoint_
{
const struct video_mcux_csi_config *config = dev->config;

if (fmt == NULL || ep != VIDEO_EP_ANY_OUT) {
switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

if (fmt == NULL) {
return -EINVAL;
}

Expand Down Expand Up @@ -212,6 +230,15 @@ static int video_mcux_csi_flush(const struct device *dev, enum video_endpoint_id
uint32_t buffer_addr;
status_t ret;

switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

if (!cancel) {
/* wait for all buffer to be processed */
do {
Expand Down Expand Up @@ -243,7 +270,12 @@ static int video_mcux_csi_enqueue(const struct device *dev, enum video_endpoint_
unsigned int to_read;
status_t ret;

if (ep != VIDEO_EP_ANY_OUT) {
switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

Expand All @@ -266,7 +298,12 @@ static int video_mcux_csi_dequeue(const struct device *dev, enum video_endpoint_
{
struct video_mcux_csi_data *data = dev->data;

if (ep != VIDEO_EP_ANY_OUT) {
switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

Expand Down Expand Up @@ -310,7 +347,12 @@ static int video_mcux_csi_get_caps(const struct device *dev, enum video_endpoint
const struct video_mcux_csi_config *config = dev->config;
int err = -ENODEV;

if (ep != VIDEO_EP_ANY_OUT) {
switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

Expand Down Expand Up @@ -365,6 +407,15 @@ static int video_mcux_csi_set_signal(const struct device *dev, enum video_endpoi
{
struct video_mcux_csi_data *data = dev->data;

switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

if (data->signal && signal != NULL) {
return -EALREADY;
}
Expand Down
43 changes: 38 additions & 5 deletions drivers/video/video_stm32_dcmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,16 @@ static int video_stm32_dcmi_set_fmt(const struct device *dev,
struct video_stm32_dcmi_data *data = dev->data;
unsigned int bpp = video_pix_fmt_bpp(fmt->pixelformat);

if (!bpp || ep != VIDEO_EP_ANY_OUT) {
switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

if (!bpp) {
return -EINVAL;
}

Expand All @@ -238,7 +247,16 @@ static int video_stm32_dcmi_get_fmt(const struct device *dev,
struct video_stm32_dcmi_data *data = dev->data;
const struct video_stm32_dcmi_config *config = dev->config;

if ((fmt == NULL) || (ep != VIDEO_EP_ANY_OUT)) {
switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

if (fmt == NULL) {
return -EINVAL;
}

Expand Down Expand Up @@ -309,7 +327,12 @@ static int video_stm32_dcmi_enqueue(const struct device *dev,
{
struct video_stm32_dcmi_data *data = dev->data;

if (ep != VIDEO_EP_ANY_OUT) {
switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

Expand All @@ -327,7 +350,12 @@ static int video_stm32_dcmi_dequeue(const struct device *dev,
{
struct video_stm32_dcmi_data *data = dev->data;

if (ep != VIDEO_EP_ANY_OUT) {
switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

Expand All @@ -346,7 +374,12 @@ static int video_stm32_dcmi_get_caps(const struct device *dev,
const struct video_stm32_dcmi_config *config = dev->config;
int ret = -ENODEV;

if (ep != VIDEO_EP_ANY_OUT) {
switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

Expand Down
55 changes: 51 additions & 4 deletions drivers/video/video_sw_generator.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,12 @@ static int video_sw_generator_set_fmt(const struct device *dev, enum video_endpo
struct video_sw_generator_data *data = dev->data;
int i = 0;

if (ep != VIDEO_EP_ANY_OUT) {
switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

Expand All @@ -79,7 +84,12 @@ static int video_sw_generator_get_fmt(const struct device *dev, enum video_endpo
{
struct video_sw_generator_data *data = dev->data;

if (ep != VIDEO_EP_ANY_OUT) {
switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

Expand Down Expand Up @@ -171,7 +181,12 @@ static int video_sw_generator_enqueue(const struct device *dev, enum video_endpo
{
struct video_sw_generator_data *data = dev->data;

if (ep != VIDEO_EP_ANY_OUT) {
switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

Expand All @@ -185,7 +200,12 @@ static int video_sw_generator_dequeue(const struct device *dev, enum video_endpo
{
struct video_sw_generator_data *data = dev->data;

if (ep != VIDEO_EP_ANY_OUT) {
switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

Expand All @@ -203,6 +223,15 @@ static int video_sw_generator_flush(const struct device *dev, enum video_endpoin
struct video_sw_generator_data *data = dev->data;
struct video_buffer *vbuf;

switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

if (!cancel) {
/* wait for all buffer to be processed */
do {
Expand All @@ -223,6 +252,15 @@ static int video_sw_generator_flush(const struct device *dev, enum video_endpoin
static int video_sw_generator_get_caps(const struct device *dev, enum video_endpoint_id ep,
struct video_caps *caps)
{
switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

caps->format_caps = fmts;
caps->min_vbuf_count = 0;

Expand All @@ -235,6 +273,15 @@ static int video_sw_generator_set_signal(const struct device *dev, enum video_en
{
struct video_sw_generator_data *data = dev->data;

switch (ep) {
case VIDEO_EP_ANY_OUT:
case VIDEO_EP_ANY:
case 0x0:
break;
default:
return -EINVAL;
}

if (data->signal && signal != NULL) {
return -EALREADY;
}
Expand Down

0 comments on commit 2bbfd19

Please sign in to comment.