1*9c942882SAbdelkader Boudih# 2*9c942882SAbdelkader Boudih# Copyright (c) 2026 Abdelkader Boudih <freebsd@seuros.com> 3*9c942882SAbdelkader Boudih# 4*9c942882SAbdelkader Boudih# SPDX-License-Identifier: BSD-2-Clause 5*9c942882SAbdelkader Boudih# 6*9c942882SAbdelkader Boudih 7*9c942882SAbdelkader Boudih#include <sys/bus.h> 8*9c942882SAbdelkader Boudih#include <dev/video/video.h> 9*9c942882SAbdelkader Boudih 10*9c942882SAbdelkader BoudihINTERFACE video; 11*9c942882SAbdelkader Boudih 12*9c942882SAbdelkader BoudihCODE { 13*9c942882SAbdelkader Boudih static int 14*9c942882SAbdelkader Boudih video_default_open(device_t dev __unused) 15*9c942882SAbdelkader Boudih { 16*9c942882SAbdelkader Boudih 17*9c942882SAbdelkader Boudih return (0); 18*9c942882SAbdelkader Boudih } 19*9c942882SAbdelkader Boudih 20*9c942882SAbdelkader Boudih static void 21*9c942882SAbdelkader Boudih video_default_close(device_t dev __unused) 22*9c942882SAbdelkader Boudih { 23*9c942882SAbdelkader Boudih } 24*9c942882SAbdelkader Boudih 25*9c942882SAbdelkader Boudih static int 26*9c942882SAbdelkader Boudih video_default_frmsize(device_t dev __unused, 27*9c942882SAbdelkader Boudih struct video_frmsizeenum *fs __unused) 28*9c942882SAbdelkader Boudih { 29*9c942882SAbdelkader Boudih 30*9c942882SAbdelkader Boudih return (ENOTTY); 31*9c942882SAbdelkader Boudih } 32*9c942882SAbdelkader Boudih 33*9c942882SAbdelkader Boudih static int 34*9c942882SAbdelkader Boudih video_default_frmival(device_t dev __unused, 35*9c942882SAbdelkader Boudih struct video_frmivalenum *fi __unused) 36*9c942882SAbdelkader Boudih { 37*9c942882SAbdelkader Boudih 38*9c942882SAbdelkader Boudih return (ENOTTY); 39*9c942882SAbdelkader Boudih } 40*9c942882SAbdelkader Boudih 41*9c942882SAbdelkader Boudih static int 42*9c942882SAbdelkader Boudih video_default_format(device_t dev __unused, 43*9c942882SAbdelkader Boudih struct video_format *fmt __unused) 44*9c942882SAbdelkader Boudih { 45*9c942882SAbdelkader Boudih 46*9c942882SAbdelkader Boudih return (ENOTTY); 47*9c942882SAbdelkader Boudih } 48*9c942882SAbdelkader Boudih 49*9c942882SAbdelkader Boudih static int 50*9c942882SAbdelkader Boudih video_default_fract(device_t dev __unused, 51*9c942882SAbdelkader Boudih struct video_fract *fr __unused) 52*9c942882SAbdelkader Boudih { 53*9c942882SAbdelkader Boudih 54*9c942882SAbdelkader Boudih return (ENOTTY); 55*9c942882SAbdelkader Boudih } 56*9c942882SAbdelkader Boudih 57*9c942882SAbdelkader Boudih static int 58*9c942882SAbdelkader Boudih video_default_enum_input(device_t dev __unused, uint32_t index __unused, 59*9c942882SAbdelkader Boudih struct video_input *inp __unused) 60*9c942882SAbdelkader Boudih { 61*9c942882SAbdelkader Boudih 62*9c942882SAbdelkader Boudih return (ENOTTY); 63*9c942882SAbdelkader Boudih } 64*9c942882SAbdelkader Boudih 65*9c942882SAbdelkader Boudih static int 66*9c942882SAbdelkader Boudih video_default_get_input(device_t dev __unused, uint32_t *idx __unused) 67*9c942882SAbdelkader Boudih { 68*9c942882SAbdelkader Boudih 69*9c942882SAbdelkader Boudih return (ENOTTY); 70*9c942882SAbdelkader Boudih } 71*9c942882SAbdelkader Boudih 72*9c942882SAbdelkader Boudih static int 73*9c942882SAbdelkader Boudih video_default_set_input(device_t dev __unused, uint32_t idx __unused) 74*9c942882SAbdelkader Boudih { 75*9c942882SAbdelkader Boudih 76*9c942882SAbdelkader Boudih return (ENOTTY); 77*9c942882SAbdelkader Boudih } 78*9c942882SAbdelkader Boudih 79*9c942882SAbdelkader Boudih static int 80*9c942882SAbdelkader Boudih video_default_query_control(device_t dev __unused, 81*9c942882SAbdelkader Boudih struct video_control_desc *d __unused) 82*9c942882SAbdelkader Boudih { 83*9c942882SAbdelkader Boudih 84*9c942882SAbdelkader Boudih return (ENOTTY); 85*9c942882SAbdelkader Boudih } 86*9c942882SAbdelkader Boudih 87*9c942882SAbdelkader Boudih static int 88*9c942882SAbdelkader Boudih video_default_get_control(device_t dev __unused, 89*9c942882SAbdelkader Boudih struct video_control *c __unused) 90*9c942882SAbdelkader Boudih { 91*9c942882SAbdelkader Boudih 92*9c942882SAbdelkader Boudih return (ENOTTY); 93*9c942882SAbdelkader Boudih } 94*9c942882SAbdelkader Boudih 95*9c942882SAbdelkader Boudih static int 96*9c942882SAbdelkader Boudih video_default_set_control(device_t dev __unused, 97*9c942882SAbdelkader Boudih const struct video_control *c __unused) 98*9c942882SAbdelkader Boudih { 99*9c942882SAbdelkader Boudih 100*9c942882SAbdelkader Boudih return (ENOTTY); 101*9c942882SAbdelkader Boudih } 102*9c942882SAbdelkader Boudih}; 103*9c942882SAbdelkader Boudih 104*9c942882SAbdelkader BoudihMETHOD int open { 105*9c942882SAbdelkader Boudih device_t dev; 106*9c942882SAbdelkader Boudih} DEFAULT video_default_open; 107*9c942882SAbdelkader Boudih 108*9c942882SAbdelkader BoudihMETHOD void close { 109*9c942882SAbdelkader Boudih device_t dev; 110*9c942882SAbdelkader Boudih} DEFAULT video_default_close; 111*9c942882SAbdelkader Boudih 112*9c942882SAbdelkader BoudihMETHOD int querycap { 113*9c942882SAbdelkader Boudih device_t dev; 114*9c942882SAbdelkader Boudih struct video_caps *caps; 115*9c942882SAbdelkader Boudih}; 116*9c942882SAbdelkader Boudih 117*9c942882SAbdelkader BoudihMETHOD int enum_format { 118*9c942882SAbdelkader Boudih device_t dev; 119*9c942882SAbdelkader Boudih uint32_t index; 120*9c942882SAbdelkader Boudih struct video_format *format; 121*9c942882SAbdelkader Boudih}; 122*9c942882SAbdelkader Boudih 123*9c942882SAbdelkader BoudihMETHOD int enum_framesizes { 124*9c942882SAbdelkader Boudih device_t dev; 125*9c942882SAbdelkader Boudih struct video_frmsizeenum *fsize; 126*9c942882SAbdelkader Boudih} DEFAULT video_default_frmsize; 127*9c942882SAbdelkader Boudih 128*9c942882SAbdelkader BoudihMETHOD int enum_frameintervals { 129*9c942882SAbdelkader Boudih device_t dev; 130*9c942882SAbdelkader Boudih struct video_frmivalenum *fival; 131*9c942882SAbdelkader Boudih} DEFAULT video_default_frmival; 132*9c942882SAbdelkader Boudih 133*9c942882SAbdelkader BoudihMETHOD int try_format { 134*9c942882SAbdelkader Boudih device_t dev; 135*9c942882SAbdelkader Boudih struct video_format *format; 136*9c942882SAbdelkader Boudih} DEFAULT video_default_format; 137*9c942882SAbdelkader Boudih 138*9c942882SAbdelkader BoudihMETHOD int set_format { 139*9c942882SAbdelkader Boudih device_t dev; 140*9c942882SAbdelkader Boudih const struct video_format *format; 141*9c942882SAbdelkader Boudih}; 142*9c942882SAbdelkader Boudih 143*9c942882SAbdelkader BoudihMETHOD int get_format { 144*9c942882SAbdelkader Boudih device_t dev; 145*9c942882SAbdelkader Boudih struct video_format *format; 146*9c942882SAbdelkader Boudih}; 147*9c942882SAbdelkader Boudih 148*9c942882SAbdelkader BoudihMETHOD int get_parm { 149*9c942882SAbdelkader Boudih device_t dev; 150*9c942882SAbdelkader Boudih struct video_fract *fract; 151*9c942882SAbdelkader Boudih} DEFAULT video_default_fract; 152*9c942882SAbdelkader Boudih 153*9c942882SAbdelkader BoudihMETHOD int set_parm { 154*9c942882SAbdelkader Boudih device_t dev; 155*9c942882SAbdelkader Boudih struct video_fract *fract; 156*9c942882SAbdelkader Boudih} DEFAULT video_default_fract; 157*9c942882SAbdelkader Boudih 158*9c942882SAbdelkader BoudihMETHOD int enum_input { 159*9c942882SAbdelkader Boudih device_t dev; 160*9c942882SAbdelkader Boudih uint32_t index; 161*9c942882SAbdelkader Boudih struct video_input *input; 162*9c942882SAbdelkader Boudih} DEFAULT video_default_enum_input; 163*9c942882SAbdelkader Boudih 164*9c942882SAbdelkader BoudihMETHOD int get_input { 165*9c942882SAbdelkader Boudih device_t dev; 166*9c942882SAbdelkader Boudih uint32_t *index; 167*9c942882SAbdelkader Boudih} DEFAULT video_default_get_input; 168*9c942882SAbdelkader Boudih 169*9c942882SAbdelkader BoudihMETHOD int set_input { 170*9c942882SAbdelkader Boudih device_t dev; 171*9c942882SAbdelkader Boudih uint32_t index; 172*9c942882SAbdelkader Boudih} DEFAULT video_default_set_input; 173*9c942882SAbdelkader Boudih 174*9c942882SAbdelkader BoudihMETHOD int query_control { 175*9c942882SAbdelkader Boudih device_t dev; 176*9c942882SAbdelkader Boudih struct video_control_desc *desc; 177*9c942882SAbdelkader Boudih} DEFAULT video_default_query_control; 178*9c942882SAbdelkader Boudih 179*9c942882SAbdelkader BoudihMETHOD int get_control { 180*9c942882SAbdelkader Boudih device_t dev; 181*9c942882SAbdelkader Boudih struct video_control *control; 182*9c942882SAbdelkader Boudih} DEFAULT video_default_get_control; 183*9c942882SAbdelkader Boudih 184*9c942882SAbdelkader BoudihMETHOD int set_control { 185*9c942882SAbdelkader Boudih device_t dev; 186*9c942882SAbdelkader Boudih const struct video_control *control; 187*9c942882SAbdelkader Boudih} DEFAULT video_default_set_control; 188*9c942882SAbdelkader Boudih 189*9c942882SAbdelkader Boudih# stop_stream must quiesce the provider before returning. 190*9c942882SAbdelkader BoudihMETHOD int start_stream { 191*9c942882SAbdelkader Boudih device_t dev; 192*9c942882SAbdelkader Boudih}; 193*9c942882SAbdelkader Boudih 194*9c942882SAbdelkader BoudihMETHOD void stop_stream { 195*9c942882SAbdelkader Boudih device_t dev; 196*9c942882SAbdelkader Boudih}; 197