Skip to content

Commit 287fe16

Browse files
pinchartlHans Verkuil
authored andcommitted
media: v4l2-subdev: Turn .[gs]_frame_interval into pad operations
The subdev .[gs]_frame_interval are video operations, but they operate on pads (and even on streams). Not only is this confusing, it causes practical issues for drivers as the operations don't receive a subdev state pointer, requiring manual state handling. To improve the situation, turn the operations into pad operations, and extend them to receive a state pointer like other pad operations. While at it, rename the operations to .[gs]et_frame_interval at the same time to match the naming scheme of other pad operations. This isn't strictly necessary, but given that all drivers using those operations need to be modified, handling the rename separately would generate more churn for very little gain (if at all). Signed-off-by: Laurent Pinchart <[email protected]> Reviewed-by: Hans Verkuil <[email protected]> Reviewed-by: Philipp Zabel <[email protected]> # for imx-media Reviewed-by: Luca Ceresoli <[email protected]> # for tegra-video Signed-off-by: Hans Verkuil <[email protected]>
1 parent 08e5c36 commit 287fe16

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+352
-348
lines changed

drivers/media/i2c/adv7180.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -463,8 +463,9 @@ static int adv7180_g_std(struct v4l2_subdev *sd, v4l2_std_id *norm)
463463
return 0;
464464
}
465465

466-
static int adv7180_g_frame_interval(struct v4l2_subdev *sd,
467-
struct v4l2_subdev_frame_interval *fi)
466+
static int adv7180_get_frame_interval(struct v4l2_subdev *sd,
467+
struct v4l2_subdev_state *sd_state,
468+
struct v4l2_subdev_frame_interval *fi)
468469
{
469470
struct adv7180_state *state = to_state(sd);
470471

@@ -913,7 +914,6 @@ static int adv7180_subscribe_event(struct v4l2_subdev *sd,
913914
static const struct v4l2_subdev_video_ops adv7180_video_ops = {
914915
.s_std = adv7180_s_std,
915916
.g_std = adv7180_g_std,
916-
.g_frame_interval = adv7180_g_frame_interval,
917917
.querystd = adv7180_querystd,
918918
.g_input_status = adv7180_g_input_status,
919919
.s_routing = adv7180_s_routing,
@@ -932,6 +932,7 @@ static const struct v4l2_subdev_pad_ops adv7180_pad_ops = {
932932
.enum_mbus_code = adv7180_enum_mbus_code,
933933
.set_fmt = adv7180_set_pad_format,
934934
.get_fmt = adv7180_get_pad_format,
935+
.get_frame_interval = adv7180_get_frame_interval,
935936
.get_mbus_config = adv7180_get_mbus_config,
936937
};
937938

drivers/media/i2c/alvium-csi2.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1649,6 +1649,7 @@ static int alvium_hw_init(struct alvium_dev *alvium)
16491649
/* --------------- Subdev Operations --------------- */
16501650

16511651
static int alvium_g_frame_interval(struct v4l2_subdev *sd,
1652+
struct v4l2_subdev_state *sd_state,
16521653
struct v4l2_subdev_frame_interval *fi)
16531654
{
16541655
struct alvium_dev *alvium = sd_to_alvium(sd);
@@ -1696,23 +1697,19 @@ static int alvium_set_frame_interval(struct alvium_dev *alvium,
16961697
}
16971698

16981699
static int alvium_s_frame_interval(struct v4l2_subdev *sd,
1700+
struct v4l2_subdev_state *sd_state,
16991701
struct v4l2_subdev_frame_interval *fi)
17001702
{
17011703
struct alvium_dev *alvium = sd_to_alvium(sd);
1702-
struct v4l2_subdev_state *state;
17031704
int ret;
17041705

17051706
if (alvium->streaming)
17061707
return -EBUSY;
17071708

1708-
state = v4l2_subdev_lock_and_get_active_state(sd);
1709-
17101709
ret = alvium_set_frame_interval(alvium, fi);
17111710
if (!ret)
17121711
ret = alvium_set_frame_rate(alvium);
17131712

1714-
v4l2_subdev_unlock_state(state);
1715-
17161713
return ret;
17171714
}
17181715

@@ -2238,8 +2235,6 @@ static const struct v4l2_subdev_core_ops alvium_core_ops = {
22382235
};
22392236

22402237
static const struct v4l2_subdev_video_ops alvium_video_ops = {
2241-
.g_frame_interval = alvium_g_frame_interval,
2242-
.s_frame_interval = alvium_s_frame_interval,
22432238
.s_stream = alvium_s_stream,
22442239
};
22452240

@@ -2249,6 +2244,8 @@ static const struct v4l2_subdev_pad_ops alvium_pad_ops = {
22492244
.set_fmt = alvium_set_fmt,
22502245
.get_selection = alvium_get_selection,
22512246
.set_selection = alvium_set_selection,
2247+
.get_frame_interval = alvium_g_frame_interval,
2248+
.set_frame_interval = alvium_s_frame_interval,
22522249
};
22532250

22542251
static const struct v4l2_subdev_internal_ops alvium_internal_ops = {

drivers/media/i2c/et8ek8/et8ek8_driver.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1046,6 +1046,7 @@ static int et8ek8_set_pad_format(struct v4l2_subdev *subdev,
10461046
}
10471047

10481048
static int et8ek8_get_frame_interval(struct v4l2_subdev *subdev,
1049+
struct v4l2_subdev_state *sd_state,
10491050
struct v4l2_subdev_frame_interval *fi)
10501051
{
10511052
struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
@@ -1057,6 +1058,7 @@ static int et8ek8_get_frame_interval(struct v4l2_subdev *subdev,
10571058
}
10581059

10591060
static int et8ek8_set_frame_interval(struct v4l2_subdev *subdev,
1061+
struct v4l2_subdev_state *sd_state,
10601062
struct v4l2_subdev_frame_interval *fi)
10611063
{
10621064
struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
@@ -1342,8 +1344,6 @@ static int et8ek8_close(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
13421344

13431345
static const struct v4l2_subdev_video_ops et8ek8_video_ops = {
13441346
.s_stream = et8ek8_s_stream,
1345-
.g_frame_interval = et8ek8_get_frame_interval,
1346-
.s_frame_interval = et8ek8_set_frame_interval,
13471347
};
13481348

13491349
static const struct v4l2_subdev_core_ops et8ek8_core_ops = {
@@ -1356,6 +1356,8 @@ static const struct v4l2_subdev_pad_ops et8ek8_pad_ops = {
13561356
.enum_frame_interval = et8ek8_enum_frame_ival,
13571357
.get_fmt = et8ek8_get_pad_format,
13581358
.set_fmt = et8ek8_set_pad_format,
1359+
.get_frame_interval = et8ek8_get_frame_interval,
1360+
.set_frame_interval = et8ek8_set_frame_interval,
13591361
};
13601362

13611363
static const struct v4l2_subdev_ops et8ek8_ops = {

drivers/media/i2c/imx214.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -901,8 +901,9 @@ static int imx214_s_stream(struct v4l2_subdev *subdev, int enable)
901901
return ret;
902902
}
903903

904-
static int imx214_g_frame_interval(struct v4l2_subdev *subdev,
905-
struct v4l2_subdev_frame_interval *fival)
904+
static int imx214_get_frame_interval(struct v4l2_subdev *subdev,
905+
struct v4l2_subdev_state *sd_state,
906+
struct v4l2_subdev_frame_interval *fival)
906907
{
907908
fival->interval.numerator = 1;
908909
fival->interval.denominator = IMX214_FPS;
@@ -934,8 +935,6 @@ static int imx214_enum_frame_interval(struct v4l2_subdev *subdev,
934935

935936
static const struct v4l2_subdev_video_ops imx214_video_ops = {
936937
.s_stream = imx214_s_stream,
937-
.g_frame_interval = imx214_g_frame_interval,
938-
.s_frame_interval = imx214_g_frame_interval,
939938
};
940939

941940
static const struct v4l2_subdev_pad_ops imx214_subdev_pad_ops = {
@@ -945,6 +944,8 @@ static const struct v4l2_subdev_pad_ops imx214_subdev_pad_ops = {
945944
.get_fmt = imx214_get_format,
946945
.set_fmt = imx214_set_format,
947946
.get_selection = imx214_get_selection,
947+
.get_frame_interval = imx214_get_frame_interval,
948+
.set_frame_interval = imx214_get_frame_interval,
948949
};
949950

950951
static const struct v4l2_subdev_ops imx214_subdev_ops = {

drivers/media/i2c/imx274.c

Lines changed: 16 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -594,8 +594,8 @@ static int imx274_set_gain(struct stimx274 *priv, struct v4l2_ctrl *ctrl);
594594
static int imx274_set_exposure(struct stimx274 *priv, int val);
595595
static int imx274_set_vflip(struct stimx274 *priv, int val);
596596
static int imx274_set_test_pattern(struct stimx274 *priv, int val);
597-
static int imx274_set_frame_interval(struct stimx274 *priv,
598-
struct v4l2_fract frame_interval);
597+
static int __imx274_set_frame_interval(struct stimx274 *priv,
598+
struct v4l2_fract frame_interval);
599599

600600
static inline void msleep_range(unsigned int delay_base)
601601
{
@@ -1327,17 +1327,9 @@ static int imx274_apply_trimming(struct stimx274 *imx274)
13271327
return err;
13281328
}
13291329

1330-
/**
1331-
* imx274_g_frame_interval - Get the frame interval
1332-
* @sd: Pointer to V4L2 Sub device structure
1333-
* @fi: Pointer to V4l2 Sub device frame interval structure
1334-
*
1335-
* This function is used to get the frame interval.
1336-
*
1337-
* Return: 0 on success
1338-
*/
1339-
static int imx274_g_frame_interval(struct v4l2_subdev *sd,
1340-
struct v4l2_subdev_frame_interval *fi)
1330+
static int imx274_get_frame_interval(struct v4l2_subdev *sd,
1331+
struct v4l2_subdev_state *sd_state,
1332+
struct v4l2_subdev_frame_interval *fi)
13411333
{
13421334
struct stimx274 *imx274 = to_imx274(sd);
13431335

@@ -1349,17 +1341,9 @@ static int imx274_g_frame_interval(struct v4l2_subdev *sd,
13491341
return 0;
13501342
}
13511343

1352-
/**
1353-
* imx274_s_frame_interval - Set the frame interval
1354-
* @sd: Pointer to V4L2 Sub device structure
1355-
* @fi: Pointer to V4l2 Sub device frame interval structure
1356-
*
1357-
* This function is used to set the frame intervavl.
1358-
*
1359-
* Return: 0 on success
1360-
*/
1361-
static int imx274_s_frame_interval(struct v4l2_subdev *sd,
1362-
struct v4l2_subdev_frame_interval *fi)
1344+
static int imx274_set_frame_interval(struct v4l2_subdev *sd,
1345+
struct v4l2_subdev_state *sd_state,
1346+
struct v4l2_subdev_frame_interval *fi)
13631347
{
13641348
struct stimx274 *imx274 = to_imx274(sd);
13651349
struct v4l2_ctrl *ctrl = imx274->ctrls.exposure;
@@ -1371,7 +1355,7 @@ static int imx274_s_frame_interval(struct v4l2_subdev *sd,
13711355
return ret;
13721356

13731357
mutex_lock(&imx274->lock);
1374-
ret = imx274_set_frame_interval(imx274, fi->interval);
1358+
ret = __imx274_set_frame_interval(imx274, fi->interval);
13751359

13761360
if (!ret) {
13771361
fi->interval = imx274->frame_interval;
@@ -1466,8 +1450,8 @@ static int imx274_s_stream(struct v4l2_subdev *sd, int on)
14661450
* are changed.
14671451
* gain is not affected.
14681452
*/
1469-
ret = imx274_set_frame_interval(imx274,
1470-
imx274->frame_interval);
1453+
ret = __imx274_set_frame_interval(imx274,
1454+
imx274->frame_interval);
14711455
if (ret)
14721456
goto fail;
14731457

@@ -1830,7 +1814,7 @@ static int imx274_set_frame_length(struct stimx274 *priv, u32 val)
18301814
}
18311815

18321816
/*
1833-
* imx274_set_frame_interval - Function called when setting frame interval
1817+
* __imx274_set_frame_interval - Function called when setting frame interval
18341818
* @priv: Pointer to device structure
18351819
* @frame_interval: Variable for frame interval
18361820
*
@@ -1839,8 +1823,8 @@ static int imx274_set_frame_length(struct stimx274 *priv, u32 val)
18391823
*
18401824
* Return: 0 on success
18411825
*/
1842-
static int imx274_set_frame_interval(struct stimx274 *priv,
1843-
struct v4l2_fract frame_interval)
1826+
static int __imx274_set_frame_interval(struct stimx274 *priv,
1827+
struct v4l2_fract frame_interval)
18441828
{
18451829
int err;
18461830
u32 frame_length, req_frame_rate;
@@ -1927,11 +1911,11 @@ static const struct v4l2_subdev_pad_ops imx274_pad_ops = {
19271911
.set_fmt = imx274_set_fmt,
19281912
.get_selection = imx274_get_selection,
19291913
.set_selection = imx274_set_selection,
1914+
.get_frame_interval = imx274_get_frame_interval,
1915+
.set_frame_interval = imx274_set_frame_interval,
19301916
};
19311917

19321918
static const struct v4l2_subdev_video_ops imx274_video_ops = {
1933-
.g_frame_interval = imx274_g_frame_interval,
1934-
.s_frame_interval = imx274_s_frame_interval,
19351919
.s_stream = imx274_s_stream,
19361920
};
19371921

drivers/media/i2c/max9286.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -868,8 +868,9 @@ static int max9286_s_stream(struct v4l2_subdev *sd, int enable)
868868
return 0;
869869
}
870870

871-
static int max9286_g_frame_interval(struct v4l2_subdev *sd,
872-
struct v4l2_subdev_frame_interval *interval)
871+
static int max9286_get_frame_interval(struct v4l2_subdev *sd,
872+
struct v4l2_subdev_state *sd_state,
873+
struct v4l2_subdev_frame_interval *interval)
873874
{
874875
struct max9286_priv *priv = sd_to_max9286(sd);
875876

@@ -881,8 +882,9 @@ static int max9286_g_frame_interval(struct v4l2_subdev *sd,
881882
return 0;
882883
}
883884

884-
static int max9286_s_frame_interval(struct v4l2_subdev *sd,
885-
struct v4l2_subdev_frame_interval *interval)
885+
static int max9286_set_frame_interval(struct v4l2_subdev *sd,
886+
struct v4l2_subdev_state *sd_state,
887+
struct v4l2_subdev_frame_interval *interval)
886888
{
887889
struct max9286_priv *priv = sd_to_max9286(sd);
888890

@@ -983,14 +985,14 @@ static int max9286_get_fmt(struct v4l2_subdev *sd,
983985

984986
static const struct v4l2_subdev_video_ops max9286_video_ops = {
985987
.s_stream = max9286_s_stream,
986-
.g_frame_interval = max9286_g_frame_interval,
987-
.s_frame_interval = max9286_s_frame_interval,
988988
};
989989

990990
static const struct v4l2_subdev_pad_ops max9286_pad_ops = {
991991
.enum_mbus_code = max9286_enum_mbus_code,
992992
.get_fmt = max9286_get_fmt,
993993
.set_fmt = max9286_set_fmt,
994+
.get_frame_interval = max9286_get_frame_interval,
995+
.set_frame_interval = max9286_set_frame_interval,
994996
};
995997

996998
static const struct v4l2_subdev_ops max9286_subdev_ops = {

drivers/media/i2c/mt9m111.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,8 +1045,9 @@ static const struct v4l2_subdev_core_ops mt9m111_subdev_core_ops = {
10451045
#endif
10461046
};
10471047

1048-
static int mt9m111_g_frame_interval(struct v4l2_subdev *sd,
1049-
struct v4l2_subdev_frame_interval *fi)
1048+
static int mt9m111_get_frame_interval(struct v4l2_subdev *sd,
1049+
struct v4l2_subdev_state *sd_state,
1050+
struct v4l2_subdev_frame_interval *fi)
10501051
{
10511052
struct mt9m111 *mt9m111 = container_of(sd, struct mt9m111, subdev);
10521053

@@ -1055,8 +1056,9 @@ static int mt9m111_g_frame_interval(struct v4l2_subdev *sd,
10551056
return 0;
10561057
}
10571058

1058-
static int mt9m111_s_frame_interval(struct v4l2_subdev *sd,
1059-
struct v4l2_subdev_frame_interval *fi)
1059+
static int mt9m111_set_frame_interval(struct v4l2_subdev *sd,
1060+
struct v4l2_subdev_state *sd_state,
1061+
struct v4l2_subdev_frame_interval *fi)
10601062
{
10611063
struct mt9m111 *mt9m111 = container_of(sd, struct mt9m111, subdev);
10621064
const struct mt9m111_mode_info *mode;
@@ -1151,8 +1153,6 @@ static int mt9m111_get_mbus_config(struct v4l2_subdev *sd,
11511153

11521154
static const struct v4l2_subdev_video_ops mt9m111_subdev_video_ops = {
11531155
.s_stream = mt9m111_s_stream,
1154-
.g_frame_interval = mt9m111_g_frame_interval,
1155-
.s_frame_interval = mt9m111_s_frame_interval,
11561156
};
11571157

11581158
static const struct v4l2_subdev_pad_ops mt9m111_subdev_pad_ops = {
@@ -1161,6 +1161,8 @@ static const struct v4l2_subdev_pad_ops mt9m111_subdev_pad_ops = {
11611161
.set_selection = mt9m111_set_selection,
11621162
.get_fmt = mt9m111_get_fmt,
11631163
.set_fmt = mt9m111_set_fmt,
1164+
.get_frame_interval = mt9m111_get_frame_interval,
1165+
.set_frame_interval = mt9m111_set_frame_interval,
11641166
.get_mbus_config = mt9m111_get_mbus_config,
11651167
};
11661168

drivers/media/i2c/mt9m114.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1585,8 +1585,9 @@ static int mt9m114_ifp_s_stream(struct v4l2_subdev *sd, int enable)
15851585
return ret;
15861586
}
15871587

1588-
static int mt9m114_ifp_g_frame_interval(struct v4l2_subdev *sd,
1589-
struct v4l2_subdev_frame_interval *interval)
1588+
static int mt9m114_ifp_get_frame_interval(struct v4l2_subdev *sd,
1589+
struct v4l2_subdev_state *sd_state,
1590+
struct v4l2_subdev_frame_interval *interval)
15901591
{
15911592
struct v4l2_fract *ival = &interval->interval;
15921593
struct mt9m114 *sensor = ifp_to_mt9m114(sd);
@@ -1601,8 +1602,9 @@ static int mt9m114_ifp_g_frame_interval(struct v4l2_subdev *sd,
16011602
return 0;
16021603
}
16031604

1604-
static int mt9m114_ifp_s_frame_interval(struct v4l2_subdev *sd,
1605-
struct v4l2_subdev_frame_interval *interval)
1605+
static int mt9m114_ifp_set_frame_interval(struct v4l2_subdev *sd,
1606+
struct v4l2_subdev_state *sd_state,
1607+
struct v4l2_subdev_frame_interval *interval)
16061608
{
16071609
struct v4l2_fract *ival = &interval->interval;
16081610
struct mt9m114 *sensor = ifp_to_mt9m114(sd);
@@ -1967,8 +1969,6 @@ static int mt9m114_ifp_registered(struct v4l2_subdev *sd)
19671969

19681970
static const struct v4l2_subdev_video_ops mt9m114_ifp_video_ops = {
19691971
.s_stream = mt9m114_ifp_s_stream,
1970-
.g_frame_interval = mt9m114_ifp_g_frame_interval,
1971-
.s_frame_interval = mt9m114_ifp_s_frame_interval,
19721972
};
19731973

19741974
static const struct v4l2_subdev_pad_ops mt9m114_ifp_pad_ops = {
@@ -1979,6 +1979,8 @@ static const struct v4l2_subdev_pad_ops mt9m114_ifp_pad_ops = {
19791979
.set_fmt = mt9m114_ifp_set_fmt,
19801980
.get_selection = mt9m114_ifp_get_selection,
19811981
.set_selection = mt9m114_ifp_set_selection,
1982+
.get_frame_interval = mt9m114_ifp_get_frame_interval,
1983+
.set_frame_interval = mt9m114_ifp_set_frame_interval,
19821984
};
19831985

19841986
static const struct v4l2_subdev_ops mt9m114_ifp_ops = {

0 commit comments

Comments
 (0)