v4l2-ctrls-core.c 69 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * V4L2 controls framework core implementation.
  4. *
  5. * Copyright (C) 2010-2021 Hans Verkuil <hverkuil-cisco@xs4all.nl>
  6. */
  7. #include <linux/export.h>
  8. #include <linux/mm.h>
  9. #include <linux/slab.h>
  10. #include <media/v4l2-ctrls.h>
  11. #include <media/v4l2-event.h>
  12. #include <media/v4l2-fwnode.h>
  13. #include "v4l2-ctrls-priv.h"
  14. static const union v4l2_ctrl_ptr ptr_null;
  15. static void fill_event(struct v4l2_event *ev, struct v4l2_ctrl *ctrl,
  16. u32 changes)
  17. {
  18. memset(ev, 0, sizeof(*ev));
  19. ev->type = V4L2_EVENT_CTRL;
  20. ev->id = ctrl->id;
  21. ev->u.ctrl.changes = changes;
  22. ev->u.ctrl.type = ctrl->type;
  23. ev->u.ctrl.flags = user_flags(ctrl);
  24. if (ctrl->is_ptr)
  25. ev->u.ctrl.value64 = 0;
  26. else
  27. ev->u.ctrl.value64 = *ctrl->p_cur.p_s64;
  28. ev->u.ctrl.minimum = ctrl->minimum;
  29. ev->u.ctrl.maximum = ctrl->maximum;
  30. if (ctrl->type == V4L2_CTRL_TYPE_MENU
  31. || ctrl->type == V4L2_CTRL_TYPE_INTEGER_MENU)
  32. ev->u.ctrl.step = 1;
  33. else
  34. ev->u.ctrl.step = ctrl->step;
  35. ev->u.ctrl.default_value = ctrl->default_value;
  36. }
  37. void send_initial_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl)
  38. {
  39. struct v4l2_event ev;
  40. u32 changes = V4L2_EVENT_CTRL_CH_FLAGS;
  41. if (!(ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY))
  42. changes |= V4L2_EVENT_CTRL_CH_VALUE;
  43. fill_event(&ev, ctrl, changes);
  44. v4l2_event_queue_fh(fh, &ev);
  45. }
  46. void send_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 changes)
  47. {
  48. struct v4l2_event ev;
  49. struct v4l2_subscribed_event *sev;
  50. if (list_empty(&ctrl->ev_subs))
  51. return;
  52. fill_event(&ev, ctrl, changes);
  53. list_for_each_entry(sev, &ctrl->ev_subs, node)
  54. if (sev->fh != fh ||
  55. (sev->flags & V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK))
  56. v4l2_event_queue_fh(sev->fh, &ev);
  57. }
  58. bool v4l2_ctrl_type_op_equal(const struct v4l2_ctrl *ctrl,
  59. union v4l2_ctrl_ptr ptr1, union v4l2_ctrl_ptr ptr2)
  60. {
  61. unsigned int i;
  62. switch (ctrl->type) {
  63. case V4L2_CTRL_TYPE_BUTTON:
  64. return false;
  65. case V4L2_CTRL_TYPE_STRING:
  66. for (i = 0; i < ctrl->elems; i++) {
  67. unsigned int idx = i * ctrl->elem_size;
  68. /* strings are always 0-terminated */
  69. if (strcmp(ptr1.p_char + idx, ptr2.p_char + idx))
  70. return false;
  71. }
  72. return true;
  73. default:
  74. return !memcmp(ptr1.p_const, ptr2.p_const,
  75. ctrl->elems * ctrl->elem_size);
  76. }
  77. }
  78. EXPORT_SYMBOL(v4l2_ctrl_type_op_equal);
  79. /* Default intra MPEG-2 quantisation coefficients, from the specification. */
  80. static const u8 mpeg2_intra_quant_matrix[64] = {
  81. 8, 16, 16, 19, 16, 19, 22, 22,
  82. 22, 22, 22, 22, 26, 24, 26, 27,
  83. 27, 27, 26, 26, 26, 26, 27, 27,
  84. 27, 29, 29, 29, 34, 34, 34, 29,
  85. 29, 29, 27, 27, 29, 29, 32, 32,
  86. 34, 34, 37, 38, 37, 35, 35, 34,
  87. 35, 38, 38, 40, 40, 40, 48, 48,
  88. 46, 46, 56, 56, 58, 69, 69, 83
  89. };
  90. static void std_init_compound(const struct v4l2_ctrl *ctrl, u32 idx,
  91. union v4l2_ctrl_ptr ptr)
  92. {
  93. struct v4l2_ctrl_mpeg2_sequence *p_mpeg2_sequence;
  94. struct v4l2_ctrl_mpeg2_picture *p_mpeg2_picture;
  95. struct v4l2_ctrl_mpeg2_quantisation *p_mpeg2_quant;
  96. struct v4l2_ctrl_vp8_frame *p_vp8_frame;
  97. struct v4l2_ctrl_vp9_frame *p_vp9_frame;
  98. struct v4l2_ctrl_fwht_params *p_fwht_params;
  99. struct v4l2_ctrl_h264_scaling_matrix *p_h264_scaling_matrix;
  100. struct v4l2_ctrl_av1_sequence *p_av1_sequence;
  101. void *p = ptr.p + idx * ctrl->elem_size;
  102. if (ctrl->p_def.p_const)
  103. memcpy(p, ctrl->p_def.p_const, ctrl->elem_size);
  104. else
  105. memset(p, 0, ctrl->elem_size);
  106. switch ((u32)ctrl->type) {
  107. case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
  108. p_mpeg2_sequence = p;
  109. /* 4:2:0 */
  110. p_mpeg2_sequence->chroma_format = 1;
  111. break;
  112. case V4L2_CTRL_TYPE_MPEG2_PICTURE:
  113. p_mpeg2_picture = p;
  114. /* interlaced top field */
  115. p_mpeg2_picture->picture_structure = V4L2_MPEG2_PIC_TOP_FIELD;
  116. p_mpeg2_picture->picture_coding_type =
  117. V4L2_MPEG2_PIC_CODING_TYPE_I;
  118. break;
  119. case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
  120. p_mpeg2_quant = p;
  121. memcpy(p_mpeg2_quant->intra_quantiser_matrix,
  122. mpeg2_intra_quant_matrix,
  123. ARRAY_SIZE(mpeg2_intra_quant_matrix));
  124. /*
  125. * The default non-intra MPEG-2 quantisation
  126. * coefficients are all 16, as per the specification.
  127. */
  128. memset(p_mpeg2_quant->non_intra_quantiser_matrix, 16,
  129. sizeof(p_mpeg2_quant->non_intra_quantiser_matrix));
  130. break;
  131. case V4L2_CTRL_TYPE_VP8_FRAME:
  132. p_vp8_frame = p;
  133. p_vp8_frame->num_dct_parts = 1;
  134. break;
  135. case V4L2_CTRL_TYPE_VP9_FRAME:
  136. p_vp9_frame = p;
  137. p_vp9_frame->profile = 0;
  138. p_vp9_frame->bit_depth = 8;
  139. p_vp9_frame->flags |= V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING |
  140. V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING;
  141. break;
  142. case V4L2_CTRL_TYPE_AV1_SEQUENCE:
  143. p_av1_sequence = p;
  144. p_av1_sequence->bit_depth = 8;
  145. break;
  146. case V4L2_CTRL_TYPE_FWHT_PARAMS:
  147. p_fwht_params = p;
  148. p_fwht_params->version = V4L2_FWHT_VERSION;
  149. p_fwht_params->width = 1280;
  150. p_fwht_params->height = 720;
  151. p_fwht_params->flags = V4L2_FWHT_FL_PIXENC_YUV |
  152. (2 << V4L2_FWHT_FL_COMPONENTS_NUM_OFFSET);
  153. break;
  154. case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
  155. p_h264_scaling_matrix = p;
  156. /*
  157. * The default (flat) H.264 scaling matrix when none are
  158. * specified in the bitstream, this is according to formulas
  159. * (7-8) and (7-9) of the specification.
  160. */
  161. memset(p_h264_scaling_matrix, 16, sizeof(*p_h264_scaling_matrix));
  162. break;
  163. }
  164. }
  165. void v4l2_ctrl_type_op_init(const struct v4l2_ctrl *ctrl, u32 from_idx,
  166. union v4l2_ctrl_ptr ptr)
  167. {
  168. unsigned int i;
  169. u32 tot_elems = ctrl->elems;
  170. u32 elems = tot_elems - from_idx;
  171. if (from_idx >= tot_elems)
  172. return;
  173. switch (ctrl->type) {
  174. case V4L2_CTRL_TYPE_STRING:
  175. for (i = from_idx; i < tot_elems; i++) {
  176. unsigned int offset = i * ctrl->elem_size;
  177. memset(ptr.p_char + offset, ' ', ctrl->minimum);
  178. ptr.p_char[offset + ctrl->minimum] = '\0';
  179. }
  180. break;
  181. case V4L2_CTRL_TYPE_INTEGER64:
  182. if (ctrl->default_value) {
  183. for (i = from_idx; i < tot_elems; i++)
  184. ptr.p_s64[i] = ctrl->default_value;
  185. } else {
  186. memset(ptr.p_s64 + from_idx, 0, elems * sizeof(s64));
  187. }
  188. break;
  189. case V4L2_CTRL_TYPE_INTEGER:
  190. case V4L2_CTRL_TYPE_INTEGER_MENU:
  191. case V4L2_CTRL_TYPE_MENU:
  192. case V4L2_CTRL_TYPE_BITMASK:
  193. case V4L2_CTRL_TYPE_BOOLEAN:
  194. if (ctrl->default_value) {
  195. for (i = from_idx; i < tot_elems; i++)
  196. ptr.p_s32[i] = ctrl->default_value;
  197. } else {
  198. memset(ptr.p_s32 + from_idx, 0, elems * sizeof(s32));
  199. }
  200. break;
  201. case V4L2_CTRL_TYPE_BUTTON:
  202. case V4L2_CTRL_TYPE_CTRL_CLASS:
  203. memset(ptr.p_s32 + from_idx, 0, elems * sizeof(s32));
  204. break;
  205. case V4L2_CTRL_TYPE_U8:
  206. memset(ptr.p_u8 + from_idx, ctrl->default_value, elems);
  207. break;
  208. case V4L2_CTRL_TYPE_U16:
  209. if (ctrl->default_value) {
  210. for (i = from_idx; i < tot_elems; i++)
  211. ptr.p_u16[i] = ctrl->default_value;
  212. } else {
  213. memset(ptr.p_u16 + from_idx, 0, elems * sizeof(u16));
  214. }
  215. break;
  216. case V4L2_CTRL_TYPE_U32:
  217. if (ctrl->default_value) {
  218. for (i = from_idx; i < tot_elems; i++)
  219. ptr.p_u32[i] = ctrl->default_value;
  220. } else {
  221. memset(ptr.p_u32 + from_idx, 0, elems * sizeof(u32));
  222. }
  223. break;
  224. default:
  225. for (i = from_idx; i < tot_elems; i++)
  226. std_init_compound(ctrl, i, ptr);
  227. break;
  228. }
  229. }
  230. EXPORT_SYMBOL(v4l2_ctrl_type_op_init);
  231. void v4l2_ctrl_type_op_log(const struct v4l2_ctrl *ctrl)
  232. {
  233. union v4l2_ctrl_ptr ptr = ctrl->p_cur;
  234. if (ctrl->is_array) {
  235. unsigned i;
  236. for (i = 0; i < ctrl->nr_of_dims; i++)
  237. pr_cont("[%u]", ctrl->dims[i]);
  238. pr_cont(" ");
  239. }
  240. switch (ctrl->type) {
  241. case V4L2_CTRL_TYPE_INTEGER:
  242. pr_cont("%d", *ptr.p_s32);
  243. break;
  244. case V4L2_CTRL_TYPE_BOOLEAN:
  245. pr_cont("%s", *ptr.p_s32 ? "true" : "false");
  246. break;
  247. case V4L2_CTRL_TYPE_MENU:
  248. pr_cont("%s", ctrl->qmenu[*ptr.p_s32]);
  249. break;
  250. case V4L2_CTRL_TYPE_INTEGER_MENU:
  251. pr_cont("%lld", ctrl->qmenu_int[*ptr.p_s32]);
  252. break;
  253. case V4L2_CTRL_TYPE_BITMASK:
  254. pr_cont("0x%08x", *ptr.p_s32);
  255. break;
  256. case V4L2_CTRL_TYPE_INTEGER64:
  257. pr_cont("%lld", *ptr.p_s64);
  258. break;
  259. case V4L2_CTRL_TYPE_STRING:
  260. pr_cont("%s", ptr.p_char);
  261. break;
  262. case V4L2_CTRL_TYPE_U8:
  263. pr_cont("%u", (unsigned)*ptr.p_u8);
  264. break;
  265. case V4L2_CTRL_TYPE_U16:
  266. pr_cont("%u", (unsigned)*ptr.p_u16);
  267. break;
  268. case V4L2_CTRL_TYPE_U32:
  269. pr_cont("%u", (unsigned)*ptr.p_u32);
  270. break;
  271. case V4L2_CTRL_TYPE_AREA:
  272. pr_cont("%ux%u", ptr.p_area->width, ptr.p_area->height);
  273. break;
  274. case V4L2_CTRL_TYPE_H264_SPS:
  275. pr_cont("H264_SPS");
  276. break;
  277. case V4L2_CTRL_TYPE_H264_PPS:
  278. pr_cont("H264_PPS");
  279. break;
  280. case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
  281. pr_cont("H264_SCALING_MATRIX");
  282. break;
  283. case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
  284. pr_cont("H264_SLICE_PARAMS");
  285. break;
  286. case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
  287. pr_cont("H264_DECODE_PARAMS");
  288. break;
  289. case V4L2_CTRL_TYPE_H264_PRED_WEIGHTS:
  290. pr_cont("H264_PRED_WEIGHTS");
  291. break;
  292. case V4L2_CTRL_TYPE_FWHT_PARAMS:
  293. pr_cont("FWHT_PARAMS");
  294. break;
  295. case V4L2_CTRL_TYPE_VP8_FRAME:
  296. pr_cont("VP8_FRAME");
  297. break;
  298. case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
  299. pr_cont("HDR10_CLL_INFO");
  300. break;
  301. case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
  302. pr_cont("HDR10_MASTERING_DISPLAY");
  303. break;
  304. case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
  305. pr_cont("MPEG2_QUANTISATION");
  306. break;
  307. case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
  308. pr_cont("MPEG2_SEQUENCE");
  309. break;
  310. case V4L2_CTRL_TYPE_MPEG2_PICTURE:
  311. pr_cont("MPEG2_PICTURE");
  312. break;
  313. case V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR:
  314. pr_cont("VP9_COMPRESSED_HDR");
  315. break;
  316. case V4L2_CTRL_TYPE_VP9_FRAME:
  317. pr_cont("VP9_FRAME");
  318. break;
  319. case V4L2_CTRL_TYPE_HEVC_SPS:
  320. pr_cont("HEVC_SPS");
  321. break;
  322. case V4L2_CTRL_TYPE_HEVC_PPS:
  323. pr_cont("HEVC_PPS");
  324. break;
  325. case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
  326. pr_cont("HEVC_SLICE_PARAMS");
  327. break;
  328. case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
  329. pr_cont("HEVC_SCALING_MATRIX");
  330. break;
  331. case V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS:
  332. pr_cont("HEVC_DECODE_PARAMS");
  333. break;
  334. case V4L2_CTRL_TYPE_AV1_SEQUENCE:
  335. pr_cont("AV1_SEQUENCE");
  336. break;
  337. case V4L2_CTRL_TYPE_AV1_TILE_GROUP_ENTRY:
  338. pr_cont("AV1_TILE_GROUP_ENTRY");
  339. break;
  340. case V4L2_CTRL_TYPE_AV1_FRAME:
  341. pr_cont("AV1_FRAME");
  342. break;
  343. case V4L2_CTRL_TYPE_AV1_FILM_GRAIN:
  344. pr_cont("AV1_FILM_GRAIN");
  345. break;
  346. default:
  347. pr_cont("unknown type %d", ctrl->type);
  348. break;
  349. }
  350. }
  351. EXPORT_SYMBOL(v4l2_ctrl_type_op_log);
  352. /*
  353. * Round towards the closest legal value. Be careful when we are
  354. * close to the maximum range of the control type to prevent
  355. * wrap-arounds.
  356. */
  357. #define ROUND_TO_RANGE(val, offset_type, ctrl) \
  358. ({ \
  359. offset_type offset; \
  360. if ((ctrl)->maximum >= 0 && \
  361. val >= (ctrl)->maximum - (s32)((ctrl)->step / 2)) \
  362. val = (ctrl)->maximum; \
  363. else \
  364. val += (s32)((ctrl)->step / 2); \
  365. val = clamp_t(typeof(val), val, \
  366. (ctrl)->minimum, (ctrl)->maximum); \
  367. offset = (val) - (ctrl)->minimum; \
  368. offset = (ctrl)->step * (offset / (u32)(ctrl)->step); \
  369. val = (ctrl)->minimum + offset; \
  370. 0; \
  371. })
  372. /* Validate a new control */
  373. #define zero_padding(s) \
  374. memset(&(s).padding, 0, sizeof((s).padding))
  375. #define zero_reserved(s) \
  376. memset(&(s).reserved, 0, sizeof((s).reserved))
  377. static int
  378. validate_vp9_lf_params(struct v4l2_vp9_loop_filter *lf)
  379. {
  380. unsigned int i;
  381. if (lf->flags & ~(V4L2_VP9_LOOP_FILTER_FLAG_DELTA_ENABLED |
  382. V4L2_VP9_LOOP_FILTER_FLAG_DELTA_UPDATE))
  383. return -EINVAL;
  384. /* That all values are in the accepted range. */
  385. if (lf->level > GENMASK(5, 0))
  386. return -EINVAL;
  387. if (lf->sharpness > GENMASK(2, 0))
  388. return -EINVAL;
  389. for (i = 0; i < ARRAY_SIZE(lf->ref_deltas); i++)
  390. if (lf->ref_deltas[i] < -63 || lf->ref_deltas[i] > 63)
  391. return -EINVAL;
  392. for (i = 0; i < ARRAY_SIZE(lf->mode_deltas); i++)
  393. if (lf->mode_deltas[i] < -63 || lf->mode_deltas[i] > 63)
  394. return -EINVAL;
  395. zero_reserved(*lf);
  396. return 0;
  397. }
  398. static int
  399. validate_vp9_quant_params(struct v4l2_vp9_quantization *quant)
  400. {
  401. if (quant->delta_q_y_dc < -15 || quant->delta_q_y_dc > 15 ||
  402. quant->delta_q_uv_dc < -15 || quant->delta_q_uv_dc > 15 ||
  403. quant->delta_q_uv_ac < -15 || quant->delta_q_uv_ac > 15)
  404. return -EINVAL;
  405. zero_reserved(*quant);
  406. return 0;
  407. }
  408. static int
  409. validate_vp9_seg_params(struct v4l2_vp9_segmentation *seg)
  410. {
  411. unsigned int i, j;
  412. if (seg->flags & ~(V4L2_VP9_SEGMENTATION_FLAG_ENABLED |
  413. V4L2_VP9_SEGMENTATION_FLAG_UPDATE_MAP |
  414. V4L2_VP9_SEGMENTATION_FLAG_TEMPORAL_UPDATE |
  415. V4L2_VP9_SEGMENTATION_FLAG_UPDATE_DATA |
  416. V4L2_VP9_SEGMENTATION_FLAG_ABS_OR_DELTA_UPDATE))
  417. return -EINVAL;
  418. for (i = 0; i < ARRAY_SIZE(seg->feature_enabled); i++) {
  419. if (seg->feature_enabled[i] &
  420. ~V4L2_VP9_SEGMENT_FEATURE_ENABLED_MASK)
  421. return -EINVAL;
  422. }
  423. for (i = 0; i < ARRAY_SIZE(seg->feature_data); i++) {
  424. static const int range[] = { 255, 63, 3, 0 };
  425. for (j = 0; j < ARRAY_SIZE(seg->feature_data[j]); j++) {
  426. if (seg->feature_data[i][j] < -range[j] ||
  427. seg->feature_data[i][j] > range[j])
  428. return -EINVAL;
  429. }
  430. }
  431. zero_reserved(*seg);
  432. return 0;
  433. }
  434. static int
  435. validate_vp9_compressed_hdr(struct v4l2_ctrl_vp9_compressed_hdr *hdr)
  436. {
  437. if (hdr->tx_mode > V4L2_VP9_TX_MODE_SELECT)
  438. return -EINVAL;
  439. return 0;
  440. }
  441. static int
  442. validate_vp9_frame(struct v4l2_ctrl_vp9_frame *frame)
  443. {
  444. int ret;
  445. /* Make sure we're not passed invalid flags. */
  446. if (frame->flags & ~(V4L2_VP9_FRAME_FLAG_KEY_FRAME |
  447. V4L2_VP9_FRAME_FLAG_SHOW_FRAME |
  448. V4L2_VP9_FRAME_FLAG_ERROR_RESILIENT |
  449. V4L2_VP9_FRAME_FLAG_INTRA_ONLY |
  450. V4L2_VP9_FRAME_FLAG_ALLOW_HIGH_PREC_MV |
  451. V4L2_VP9_FRAME_FLAG_REFRESH_FRAME_CTX |
  452. V4L2_VP9_FRAME_FLAG_PARALLEL_DEC_MODE |
  453. V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING |
  454. V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING |
  455. V4L2_VP9_FRAME_FLAG_COLOR_RANGE_FULL_SWING))
  456. return -EINVAL;
  457. if (frame->flags & V4L2_VP9_FRAME_FLAG_ERROR_RESILIENT &&
  458. frame->flags & V4L2_VP9_FRAME_FLAG_REFRESH_FRAME_CTX)
  459. return -EINVAL;
  460. if (frame->profile > V4L2_VP9_PROFILE_MAX)
  461. return -EINVAL;
  462. if (frame->reset_frame_context > V4L2_VP9_RESET_FRAME_CTX_ALL)
  463. return -EINVAL;
  464. if (frame->frame_context_idx >= V4L2_VP9_NUM_FRAME_CTX)
  465. return -EINVAL;
  466. /*
  467. * Profiles 0 and 1 only support 8-bit depth, profiles 2 and 3 only 10
  468. * and 12 bit depths.
  469. */
  470. if ((frame->profile < 2 && frame->bit_depth != 8) ||
  471. (frame->profile >= 2 &&
  472. (frame->bit_depth != 10 && frame->bit_depth != 12)))
  473. return -EINVAL;
  474. /* Profile 0 and 2 only accept YUV 4:2:0. */
  475. if ((frame->profile == 0 || frame->profile == 2) &&
  476. (!(frame->flags & V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING) ||
  477. !(frame->flags & V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING)))
  478. return -EINVAL;
  479. /* Profile 1 and 3 only accept YUV 4:2:2, 4:4:0 and 4:4:4. */
  480. if ((frame->profile == 1 || frame->profile == 3) &&
  481. ((frame->flags & V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING) &&
  482. (frame->flags & V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING)))
  483. return -EINVAL;
  484. if (frame->interpolation_filter > V4L2_VP9_INTERP_FILTER_SWITCHABLE)
  485. return -EINVAL;
  486. /*
  487. * According to the spec, tile_cols_log2 shall be less than or equal
  488. * to 6.
  489. */
  490. if (frame->tile_cols_log2 > 6)
  491. return -EINVAL;
  492. if (frame->reference_mode > V4L2_VP9_REFERENCE_MODE_SELECT)
  493. return -EINVAL;
  494. ret = validate_vp9_lf_params(&frame->lf);
  495. if (ret)
  496. return ret;
  497. ret = validate_vp9_quant_params(&frame->quant);
  498. if (ret)
  499. return ret;
  500. ret = validate_vp9_seg_params(&frame->seg);
  501. if (ret)
  502. return ret;
  503. zero_reserved(*frame);
  504. return 0;
  505. }
  506. static int validate_av1_quantization(struct v4l2_av1_quantization *q)
  507. {
  508. if (q->flags > GENMASK(2, 0))
  509. return -EINVAL;
  510. if (q->delta_q_y_dc < -64 || q->delta_q_y_dc > 63 ||
  511. q->delta_q_u_dc < -64 || q->delta_q_u_dc > 63 ||
  512. q->delta_q_v_dc < -64 || q->delta_q_v_dc > 63 ||
  513. q->delta_q_u_ac < -64 || q->delta_q_u_ac > 63 ||
  514. q->delta_q_v_ac < -64 || q->delta_q_v_ac > 63 ||
  515. q->delta_q_res > GENMASK(1, 0))
  516. return -EINVAL;
  517. if (q->qm_y > GENMASK(3, 0) ||
  518. q->qm_u > GENMASK(3, 0) ||
  519. q->qm_v > GENMASK(3, 0))
  520. return -EINVAL;
  521. return 0;
  522. }
  523. static int validate_av1_segmentation(struct v4l2_av1_segmentation *s)
  524. {
  525. u32 i;
  526. u32 j;
  527. if (s->flags > GENMASK(4, 0))
  528. return -EINVAL;
  529. for (i = 0; i < ARRAY_SIZE(s->feature_data); i++) {
  530. static const int segmentation_feature_signed[] = { 1, 1, 1, 1, 1, 0, 0, 0 };
  531. static const int segmentation_feature_max[] = { 255, 63, 63, 63, 63, 7, 0, 0};
  532. for (j = 0; j < ARRAY_SIZE(s->feature_data[j]); j++) {
  533. s32 limit = segmentation_feature_max[j];
  534. if (segmentation_feature_signed[j]) {
  535. if (s->feature_data[i][j] < -limit ||
  536. s->feature_data[i][j] > limit)
  537. return -EINVAL;
  538. } else {
  539. if (s->feature_data[i][j] < 0 || s->feature_data[i][j] > limit)
  540. return -EINVAL;
  541. }
  542. }
  543. }
  544. return 0;
  545. }
  546. static int validate_av1_loop_filter(struct v4l2_av1_loop_filter *lf)
  547. {
  548. u32 i;
  549. if (lf->flags > GENMASK(3, 0))
  550. return -EINVAL;
  551. for (i = 0; i < ARRAY_SIZE(lf->level); i++) {
  552. if (lf->level[i] > GENMASK(5, 0))
  553. return -EINVAL;
  554. }
  555. if (lf->sharpness > GENMASK(2, 0))
  556. return -EINVAL;
  557. for (i = 0; i < ARRAY_SIZE(lf->ref_deltas); i++) {
  558. if (lf->ref_deltas[i] < -64 || lf->ref_deltas[i] > 63)
  559. return -EINVAL;
  560. }
  561. for (i = 0; i < ARRAY_SIZE(lf->mode_deltas); i++) {
  562. if (lf->mode_deltas[i] < -64 || lf->mode_deltas[i] > 63)
  563. return -EINVAL;
  564. }
  565. return 0;
  566. }
  567. static int validate_av1_cdef(struct v4l2_av1_cdef *cdef)
  568. {
  569. u32 i;
  570. if (cdef->damping_minus_3 > GENMASK(1, 0) ||
  571. cdef->bits > GENMASK(1, 0))
  572. return -EINVAL;
  573. for (i = 0; i < 1 << cdef->bits; i++) {
  574. if (cdef->y_pri_strength[i] > GENMASK(3, 0) ||
  575. cdef->y_sec_strength[i] > 4 ||
  576. cdef->uv_pri_strength[i] > GENMASK(3, 0) ||
  577. cdef->uv_sec_strength[i] > 4)
  578. return -EINVAL;
  579. }
  580. return 0;
  581. }
  582. static int validate_av1_loop_restauration(struct v4l2_av1_loop_restoration *lr)
  583. {
  584. if (lr->lr_unit_shift > 3 || lr->lr_uv_shift > 1)
  585. return -EINVAL;
  586. return 0;
  587. }
  588. static int validate_av1_film_grain(struct v4l2_ctrl_av1_film_grain *fg)
  589. {
  590. u32 i;
  591. if (fg->flags > GENMASK(4, 0))
  592. return -EINVAL;
  593. if (fg->film_grain_params_ref_idx > GENMASK(2, 0) ||
  594. fg->num_y_points > 14 ||
  595. fg->num_cb_points > 10 ||
  596. fg->num_cr_points > GENMASK(3, 0) ||
  597. fg->grain_scaling_minus_8 > GENMASK(1, 0) ||
  598. fg->ar_coeff_lag > GENMASK(1, 0) ||
  599. fg->ar_coeff_shift_minus_6 > GENMASK(1, 0) ||
  600. fg->grain_scale_shift > GENMASK(1, 0))
  601. return -EINVAL;
  602. if (!(fg->flags & V4L2_AV1_FILM_GRAIN_FLAG_APPLY_GRAIN))
  603. return 0;
  604. for (i = 1; i < fg->num_y_points; i++)
  605. if (fg->point_y_value[i] <= fg->point_y_value[i - 1])
  606. return -EINVAL;
  607. for (i = 1; i < fg->num_cb_points; i++)
  608. if (fg->point_cb_value[i] <= fg->point_cb_value[i - 1])
  609. return -EINVAL;
  610. for (i = 1; i < fg->num_cr_points; i++)
  611. if (fg->point_cr_value[i] <= fg->point_cr_value[i - 1])
  612. return -EINVAL;
  613. return 0;
  614. }
  615. static int validate_av1_frame(struct v4l2_ctrl_av1_frame *f)
  616. {
  617. int ret = 0;
  618. ret = validate_av1_quantization(&f->quantization);
  619. if (ret)
  620. return ret;
  621. ret = validate_av1_segmentation(&f->segmentation);
  622. if (ret)
  623. return ret;
  624. ret = validate_av1_loop_filter(&f->loop_filter);
  625. if (ret)
  626. return ret;
  627. ret = validate_av1_cdef(&f->cdef);
  628. if (ret)
  629. return ret;
  630. ret = validate_av1_loop_restauration(&f->loop_restoration);
  631. if (ret)
  632. return ret;
  633. if (f->flags &
  634. ~(V4L2_AV1_FRAME_FLAG_SHOW_FRAME |
  635. V4L2_AV1_FRAME_FLAG_SHOWABLE_FRAME |
  636. V4L2_AV1_FRAME_FLAG_ERROR_RESILIENT_MODE |
  637. V4L2_AV1_FRAME_FLAG_DISABLE_CDF_UPDATE |
  638. V4L2_AV1_FRAME_FLAG_ALLOW_SCREEN_CONTENT_TOOLS |
  639. V4L2_AV1_FRAME_FLAG_FORCE_INTEGER_MV |
  640. V4L2_AV1_FRAME_FLAG_ALLOW_INTRABC |
  641. V4L2_AV1_FRAME_FLAG_USE_SUPERRES |
  642. V4L2_AV1_FRAME_FLAG_ALLOW_HIGH_PRECISION_MV |
  643. V4L2_AV1_FRAME_FLAG_IS_MOTION_MODE_SWITCHABLE |
  644. V4L2_AV1_FRAME_FLAG_USE_REF_FRAME_MVS |
  645. V4L2_AV1_FRAME_FLAG_DISABLE_FRAME_END_UPDATE_CDF |
  646. V4L2_AV1_FRAME_FLAG_ALLOW_WARPED_MOTION |
  647. V4L2_AV1_FRAME_FLAG_REFERENCE_SELECT |
  648. V4L2_AV1_FRAME_FLAG_REDUCED_TX_SET |
  649. V4L2_AV1_FRAME_FLAG_SKIP_MODE_ALLOWED |
  650. V4L2_AV1_FRAME_FLAG_SKIP_MODE_PRESENT |
  651. V4L2_AV1_FRAME_FLAG_FRAME_SIZE_OVERRIDE |
  652. V4L2_AV1_FRAME_FLAG_BUFFER_REMOVAL_TIME_PRESENT |
  653. V4L2_AV1_FRAME_FLAG_FRAME_REFS_SHORT_SIGNALING))
  654. return -EINVAL;
  655. if (f->superres_denom > GENMASK(2, 0) + 9)
  656. return -EINVAL;
  657. return 0;
  658. }
  659. static int validate_av1_sequence(struct v4l2_ctrl_av1_sequence *s)
  660. {
  661. if (s->flags &
  662. ~(V4L2_AV1_SEQUENCE_FLAG_STILL_PICTURE |
  663. V4L2_AV1_SEQUENCE_FLAG_USE_128X128_SUPERBLOCK |
  664. V4L2_AV1_SEQUENCE_FLAG_ENABLE_FILTER_INTRA |
  665. V4L2_AV1_SEQUENCE_FLAG_ENABLE_INTRA_EDGE_FILTER |
  666. V4L2_AV1_SEQUENCE_FLAG_ENABLE_INTERINTRA_COMPOUND |
  667. V4L2_AV1_SEQUENCE_FLAG_ENABLE_MASKED_COMPOUND |
  668. V4L2_AV1_SEQUENCE_FLAG_ENABLE_WARPED_MOTION |
  669. V4L2_AV1_SEQUENCE_FLAG_ENABLE_DUAL_FILTER |
  670. V4L2_AV1_SEQUENCE_FLAG_ENABLE_ORDER_HINT |
  671. V4L2_AV1_SEQUENCE_FLAG_ENABLE_JNT_COMP |
  672. V4L2_AV1_SEQUENCE_FLAG_ENABLE_REF_FRAME_MVS |
  673. V4L2_AV1_SEQUENCE_FLAG_ENABLE_SUPERRES |
  674. V4L2_AV1_SEQUENCE_FLAG_ENABLE_CDEF |
  675. V4L2_AV1_SEQUENCE_FLAG_ENABLE_RESTORATION |
  676. V4L2_AV1_SEQUENCE_FLAG_MONO_CHROME |
  677. V4L2_AV1_SEQUENCE_FLAG_COLOR_RANGE |
  678. V4L2_AV1_SEQUENCE_FLAG_SUBSAMPLING_X |
  679. V4L2_AV1_SEQUENCE_FLAG_SUBSAMPLING_Y |
  680. V4L2_AV1_SEQUENCE_FLAG_FILM_GRAIN_PARAMS_PRESENT |
  681. V4L2_AV1_SEQUENCE_FLAG_SEPARATE_UV_DELTA_Q))
  682. return -EINVAL;
  683. if (s->seq_profile == 1 && s->flags & V4L2_AV1_SEQUENCE_FLAG_MONO_CHROME)
  684. return -EINVAL;
  685. /* reserved */
  686. if (s->seq_profile > 2)
  687. return -EINVAL;
  688. /* TODO: PROFILES */
  689. return 0;
  690. }
  691. /*
  692. * Compound controls validation requires setting unused fields/flags to zero
  693. * in order to properly detect unchanged controls with v4l2_ctrl_type_op_equal's
  694. * memcmp.
  695. */
  696. static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
  697. union v4l2_ctrl_ptr ptr)
  698. {
  699. struct v4l2_ctrl_mpeg2_sequence *p_mpeg2_sequence;
  700. struct v4l2_ctrl_mpeg2_picture *p_mpeg2_picture;
  701. struct v4l2_ctrl_vp8_frame *p_vp8_frame;
  702. struct v4l2_ctrl_fwht_params *p_fwht_params;
  703. struct v4l2_ctrl_h264_sps *p_h264_sps;
  704. struct v4l2_ctrl_h264_pps *p_h264_pps;
  705. struct v4l2_ctrl_h264_pred_weights *p_h264_pred_weights;
  706. struct v4l2_ctrl_h264_slice_params *p_h264_slice_params;
  707. struct v4l2_ctrl_h264_decode_params *p_h264_dec_params;
  708. struct v4l2_ctrl_hevc_sps *p_hevc_sps;
  709. struct v4l2_ctrl_hevc_pps *p_hevc_pps;
  710. struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering;
  711. struct v4l2_ctrl_hevc_decode_params *p_hevc_decode_params;
  712. struct v4l2_area *area;
  713. void *p = ptr.p + idx * ctrl->elem_size;
  714. unsigned int i;
  715. switch ((u32)ctrl->type) {
  716. case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
  717. p_mpeg2_sequence = p;
  718. switch (p_mpeg2_sequence->chroma_format) {
  719. case 1: /* 4:2:0 */
  720. case 2: /* 4:2:2 */
  721. case 3: /* 4:4:4 */
  722. break;
  723. default:
  724. return -EINVAL;
  725. }
  726. break;
  727. case V4L2_CTRL_TYPE_MPEG2_PICTURE:
  728. p_mpeg2_picture = p;
  729. switch (p_mpeg2_picture->intra_dc_precision) {
  730. case 0: /* 8 bits */
  731. case 1: /* 9 bits */
  732. case 2: /* 10 bits */
  733. case 3: /* 11 bits */
  734. break;
  735. default:
  736. return -EINVAL;
  737. }
  738. switch (p_mpeg2_picture->picture_structure) {
  739. case V4L2_MPEG2_PIC_TOP_FIELD:
  740. case V4L2_MPEG2_PIC_BOTTOM_FIELD:
  741. case V4L2_MPEG2_PIC_FRAME:
  742. break;
  743. default:
  744. return -EINVAL;
  745. }
  746. switch (p_mpeg2_picture->picture_coding_type) {
  747. case V4L2_MPEG2_PIC_CODING_TYPE_I:
  748. case V4L2_MPEG2_PIC_CODING_TYPE_P:
  749. case V4L2_MPEG2_PIC_CODING_TYPE_B:
  750. break;
  751. default:
  752. return -EINVAL;
  753. }
  754. zero_reserved(*p_mpeg2_picture);
  755. break;
  756. case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
  757. break;
  758. case V4L2_CTRL_TYPE_FWHT_PARAMS:
  759. p_fwht_params = p;
  760. if (p_fwht_params->version < V4L2_FWHT_VERSION)
  761. return -EINVAL;
  762. if (!p_fwht_params->width || !p_fwht_params->height)
  763. return -EINVAL;
  764. break;
  765. case V4L2_CTRL_TYPE_H264_SPS:
  766. p_h264_sps = p;
  767. /* Some syntax elements are only conditionally valid */
  768. if (p_h264_sps->pic_order_cnt_type != 0) {
  769. p_h264_sps->log2_max_pic_order_cnt_lsb_minus4 = 0;
  770. } else if (p_h264_sps->pic_order_cnt_type != 1) {
  771. p_h264_sps->num_ref_frames_in_pic_order_cnt_cycle = 0;
  772. p_h264_sps->offset_for_non_ref_pic = 0;
  773. p_h264_sps->offset_for_top_to_bottom_field = 0;
  774. memset(&p_h264_sps->offset_for_ref_frame, 0,
  775. sizeof(p_h264_sps->offset_for_ref_frame));
  776. }
  777. if (!V4L2_H264_SPS_HAS_CHROMA_FORMAT(p_h264_sps)) {
  778. p_h264_sps->chroma_format_idc = 1;
  779. p_h264_sps->bit_depth_luma_minus8 = 0;
  780. p_h264_sps->bit_depth_chroma_minus8 = 0;
  781. p_h264_sps->flags &=
  782. ~V4L2_H264_SPS_FLAG_QPPRIME_Y_ZERO_TRANSFORM_BYPASS;
  783. }
  784. if (p_h264_sps->chroma_format_idc < 3)
  785. p_h264_sps->flags &=
  786. ~V4L2_H264_SPS_FLAG_SEPARATE_COLOUR_PLANE;
  787. if (p_h264_sps->flags & V4L2_H264_SPS_FLAG_FRAME_MBS_ONLY)
  788. p_h264_sps->flags &=
  789. ~V4L2_H264_SPS_FLAG_MB_ADAPTIVE_FRAME_FIELD;
  790. /*
  791. * Chroma 4:2:2 format require at least High 4:2:2 profile.
  792. *
  793. * The H264 specification and well-known parser implementations
  794. * use profile-idc values directly, as that is clearer and
  795. * less ambiguous. We do the same here.
  796. */
  797. if (p_h264_sps->profile_idc < 122 &&
  798. p_h264_sps->chroma_format_idc > 1)
  799. return -EINVAL;
  800. /* Chroma 4:4:4 format require at least High 4:2:2 profile */
  801. if (p_h264_sps->profile_idc < 244 &&
  802. p_h264_sps->chroma_format_idc > 2)
  803. return -EINVAL;
  804. if (p_h264_sps->chroma_format_idc > 3)
  805. return -EINVAL;
  806. if (p_h264_sps->bit_depth_luma_minus8 > 6)
  807. return -EINVAL;
  808. if (p_h264_sps->bit_depth_chroma_minus8 > 6)
  809. return -EINVAL;
  810. if (p_h264_sps->log2_max_frame_num_minus4 > 12)
  811. return -EINVAL;
  812. if (p_h264_sps->pic_order_cnt_type > 2)
  813. return -EINVAL;
  814. if (p_h264_sps->log2_max_pic_order_cnt_lsb_minus4 > 12)
  815. return -EINVAL;
  816. if (p_h264_sps->max_num_ref_frames > V4L2_H264_REF_LIST_LEN)
  817. return -EINVAL;
  818. break;
  819. case V4L2_CTRL_TYPE_H264_PPS:
  820. p_h264_pps = p;
  821. if (p_h264_pps->num_slice_groups_minus1 > 7)
  822. return -EINVAL;
  823. if (p_h264_pps->num_ref_idx_l0_default_active_minus1 >
  824. (V4L2_H264_REF_LIST_LEN - 1))
  825. return -EINVAL;
  826. if (p_h264_pps->num_ref_idx_l1_default_active_minus1 >
  827. (V4L2_H264_REF_LIST_LEN - 1))
  828. return -EINVAL;
  829. if (p_h264_pps->weighted_bipred_idc > 2)
  830. return -EINVAL;
  831. /*
  832. * pic_init_qp_minus26 shall be in the range of
  833. * -(26 + QpBdOffset_y) to +25, inclusive,
  834. * where QpBdOffset_y is 6 * bit_depth_luma_minus8
  835. */
  836. if (p_h264_pps->pic_init_qp_minus26 < -62 ||
  837. p_h264_pps->pic_init_qp_minus26 > 25)
  838. return -EINVAL;
  839. if (p_h264_pps->pic_init_qs_minus26 < -26 ||
  840. p_h264_pps->pic_init_qs_minus26 > 25)
  841. return -EINVAL;
  842. if (p_h264_pps->chroma_qp_index_offset < -12 ||
  843. p_h264_pps->chroma_qp_index_offset > 12)
  844. return -EINVAL;
  845. if (p_h264_pps->second_chroma_qp_index_offset < -12 ||
  846. p_h264_pps->second_chroma_qp_index_offset > 12)
  847. return -EINVAL;
  848. break;
  849. case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
  850. break;
  851. case V4L2_CTRL_TYPE_H264_PRED_WEIGHTS:
  852. p_h264_pred_weights = p;
  853. if (p_h264_pred_weights->luma_log2_weight_denom > 7)
  854. return -EINVAL;
  855. if (p_h264_pred_weights->chroma_log2_weight_denom > 7)
  856. return -EINVAL;
  857. break;
  858. case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
  859. p_h264_slice_params = p;
  860. if (p_h264_slice_params->slice_type != V4L2_H264_SLICE_TYPE_B)
  861. p_h264_slice_params->flags &=
  862. ~V4L2_H264_SLICE_FLAG_DIRECT_SPATIAL_MV_PRED;
  863. if (p_h264_slice_params->colour_plane_id > 2)
  864. return -EINVAL;
  865. if (p_h264_slice_params->cabac_init_idc > 2)
  866. return -EINVAL;
  867. if (p_h264_slice_params->disable_deblocking_filter_idc > 2)
  868. return -EINVAL;
  869. if (p_h264_slice_params->slice_alpha_c0_offset_div2 < -6 ||
  870. p_h264_slice_params->slice_alpha_c0_offset_div2 > 6)
  871. return -EINVAL;
  872. if (p_h264_slice_params->slice_beta_offset_div2 < -6 ||
  873. p_h264_slice_params->slice_beta_offset_div2 > 6)
  874. return -EINVAL;
  875. if (p_h264_slice_params->slice_type == V4L2_H264_SLICE_TYPE_I ||
  876. p_h264_slice_params->slice_type == V4L2_H264_SLICE_TYPE_SI)
  877. p_h264_slice_params->num_ref_idx_l0_active_minus1 = 0;
  878. if (p_h264_slice_params->slice_type != V4L2_H264_SLICE_TYPE_B)
  879. p_h264_slice_params->num_ref_idx_l1_active_minus1 = 0;
  880. if (p_h264_slice_params->num_ref_idx_l0_active_minus1 >
  881. (V4L2_H264_REF_LIST_LEN - 1))
  882. return -EINVAL;
  883. if (p_h264_slice_params->num_ref_idx_l1_active_minus1 >
  884. (V4L2_H264_REF_LIST_LEN - 1))
  885. return -EINVAL;
  886. zero_reserved(*p_h264_slice_params);
  887. break;
  888. case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
  889. p_h264_dec_params = p;
  890. if (p_h264_dec_params->nal_ref_idc > 3)
  891. return -EINVAL;
  892. for (i = 0; i < V4L2_H264_NUM_DPB_ENTRIES; i++) {
  893. struct v4l2_h264_dpb_entry *dpb_entry =
  894. &p_h264_dec_params->dpb[i];
  895. zero_reserved(*dpb_entry);
  896. }
  897. zero_reserved(*p_h264_dec_params);
  898. break;
  899. case V4L2_CTRL_TYPE_VP8_FRAME:
  900. p_vp8_frame = p;
  901. switch (p_vp8_frame->num_dct_parts) {
  902. case 1:
  903. case 2:
  904. case 4:
  905. case 8:
  906. break;
  907. default:
  908. return -EINVAL;
  909. }
  910. zero_padding(p_vp8_frame->segment);
  911. zero_padding(p_vp8_frame->lf);
  912. zero_padding(p_vp8_frame->quant);
  913. zero_padding(p_vp8_frame->entropy);
  914. zero_padding(p_vp8_frame->coder_state);
  915. break;
  916. case V4L2_CTRL_TYPE_HEVC_SPS:
  917. p_hevc_sps = p;
  918. if (!(p_hevc_sps->flags & V4L2_HEVC_SPS_FLAG_PCM_ENABLED)) {
  919. p_hevc_sps->pcm_sample_bit_depth_luma_minus1 = 0;
  920. p_hevc_sps->pcm_sample_bit_depth_chroma_minus1 = 0;
  921. p_hevc_sps->log2_min_pcm_luma_coding_block_size_minus3 = 0;
  922. p_hevc_sps->log2_diff_max_min_pcm_luma_coding_block_size = 0;
  923. }
  924. if (!(p_hevc_sps->flags &
  925. V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT))
  926. p_hevc_sps->num_long_term_ref_pics_sps = 0;
  927. break;
  928. case V4L2_CTRL_TYPE_HEVC_PPS:
  929. p_hevc_pps = p;
  930. if (!(p_hevc_pps->flags &
  931. V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED))
  932. p_hevc_pps->diff_cu_qp_delta_depth = 0;
  933. if (!(p_hevc_pps->flags & V4L2_HEVC_PPS_FLAG_TILES_ENABLED)) {
  934. p_hevc_pps->num_tile_columns_minus1 = 0;
  935. p_hevc_pps->num_tile_rows_minus1 = 0;
  936. memset(&p_hevc_pps->column_width_minus1, 0,
  937. sizeof(p_hevc_pps->column_width_minus1));
  938. memset(&p_hevc_pps->row_height_minus1, 0,
  939. sizeof(p_hevc_pps->row_height_minus1));
  940. p_hevc_pps->flags &=
  941. ~V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED;
  942. }
  943. if (p_hevc_pps->flags &
  944. V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER) {
  945. p_hevc_pps->pps_beta_offset_div2 = 0;
  946. p_hevc_pps->pps_tc_offset_div2 = 0;
  947. }
  948. break;
  949. case V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS:
  950. p_hevc_decode_params = p;
  951. if (p_hevc_decode_params->num_active_dpb_entries >
  952. V4L2_HEVC_DPB_ENTRIES_NUM_MAX)
  953. return -EINVAL;
  954. break;
  955. case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
  956. break;
  957. case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
  958. break;
  959. case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
  960. p_hdr10_mastering = p;
  961. for (i = 0; i < 3; ++i) {
  962. if (p_hdr10_mastering->display_primaries_x[i] <
  963. V4L2_HDR10_MASTERING_PRIMARIES_X_LOW ||
  964. p_hdr10_mastering->display_primaries_x[i] >
  965. V4L2_HDR10_MASTERING_PRIMARIES_X_HIGH ||
  966. p_hdr10_mastering->display_primaries_y[i] <
  967. V4L2_HDR10_MASTERING_PRIMARIES_Y_LOW ||
  968. p_hdr10_mastering->display_primaries_y[i] >
  969. V4L2_HDR10_MASTERING_PRIMARIES_Y_HIGH)
  970. return -EINVAL;
  971. }
  972. if (p_hdr10_mastering->white_point_x <
  973. V4L2_HDR10_MASTERING_WHITE_POINT_X_LOW ||
  974. p_hdr10_mastering->white_point_x >
  975. V4L2_HDR10_MASTERING_WHITE_POINT_X_HIGH ||
  976. p_hdr10_mastering->white_point_y <
  977. V4L2_HDR10_MASTERING_WHITE_POINT_Y_LOW ||
  978. p_hdr10_mastering->white_point_y >
  979. V4L2_HDR10_MASTERING_WHITE_POINT_Y_HIGH)
  980. return -EINVAL;
  981. if (p_hdr10_mastering->max_display_mastering_luminance <
  982. V4L2_HDR10_MASTERING_MAX_LUMA_LOW ||
  983. p_hdr10_mastering->max_display_mastering_luminance >
  984. V4L2_HDR10_MASTERING_MAX_LUMA_HIGH ||
  985. p_hdr10_mastering->min_display_mastering_luminance <
  986. V4L2_HDR10_MASTERING_MIN_LUMA_LOW ||
  987. p_hdr10_mastering->min_display_mastering_luminance >
  988. V4L2_HDR10_MASTERING_MIN_LUMA_HIGH)
  989. return -EINVAL;
  990. /* The following restriction comes from ITU-T Rec. H.265 spec */
  991. if (p_hdr10_mastering->max_display_mastering_luminance ==
  992. V4L2_HDR10_MASTERING_MAX_LUMA_LOW &&
  993. p_hdr10_mastering->min_display_mastering_luminance ==
  994. V4L2_HDR10_MASTERING_MIN_LUMA_HIGH)
  995. return -EINVAL;
  996. break;
  997. case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
  998. break;
  999. case V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR:
  1000. return validate_vp9_compressed_hdr(p);
  1001. case V4L2_CTRL_TYPE_VP9_FRAME:
  1002. return validate_vp9_frame(p);
  1003. case V4L2_CTRL_TYPE_AV1_FRAME:
  1004. return validate_av1_frame(p);
  1005. case V4L2_CTRL_TYPE_AV1_SEQUENCE:
  1006. return validate_av1_sequence(p);
  1007. case V4L2_CTRL_TYPE_AV1_TILE_GROUP_ENTRY:
  1008. break;
  1009. case V4L2_CTRL_TYPE_AV1_FILM_GRAIN:
  1010. return validate_av1_film_grain(p);
  1011. case V4L2_CTRL_TYPE_AREA:
  1012. area = p;
  1013. if (!area->width || !area->height)
  1014. return -EINVAL;
  1015. break;
  1016. default:
  1017. return -EINVAL;
  1018. }
  1019. return 0;
  1020. }
  1021. static int std_validate_elem(const struct v4l2_ctrl *ctrl, u32 idx,
  1022. union v4l2_ctrl_ptr ptr)
  1023. {
  1024. size_t len;
  1025. u64 offset;
  1026. s64 val;
  1027. switch ((u32)ctrl->type) {
  1028. case V4L2_CTRL_TYPE_INTEGER:
  1029. return ROUND_TO_RANGE(ptr.p_s32[idx], u32, ctrl);
  1030. case V4L2_CTRL_TYPE_INTEGER64:
  1031. /*
  1032. * We can't use the ROUND_TO_RANGE define here due to
  1033. * the u64 divide that needs special care.
  1034. */
  1035. val = ptr.p_s64[idx];
  1036. if (ctrl->maximum >= 0 && val >= ctrl->maximum - (s64)(ctrl->step / 2))
  1037. val = ctrl->maximum;
  1038. else
  1039. val += (s64)(ctrl->step / 2);
  1040. val = clamp_t(s64, val, ctrl->minimum, ctrl->maximum);
  1041. offset = val - ctrl->minimum;
  1042. do_div(offset, ctrl->step);
  1043. ptr.p_s64[idx] = ctrl->minimum + offset * ctrl->step;
  1044. return 0;
  1045. case V4L2_CTRL_TYPE_U8:
  1046. return ROUND_TO_RANGE(ptr.p_u8[idx], u8, ctrl);
  1047. case V4L2_CTRL_TYPE_U16:
  1048. return ROUND_TO_RANGE(ptr.p_u16[idx], u16, ctrl);
  1049. case V4L2_CTRL_TYPE_U32:
  1050. return ROUND_TO_RANGE(ptr.p_u32[idx], u32, ctrl);
  1051. case V4L2_CTRL_TYPE_BOOLEAN:
  1052. ptr.p_s32[idx] = !!ptr.p_s32[idx];
  1053. return 0;
  1054. case V4L2_CTRL_TYPE_MENU:
  1055. case V4L2_CTRL_TYPE_INTEGER_MENU:
  1056. if (ptr.p_s32[idx] < ctrl->minimum || ptr.p_s32[idx] > ctrl->maximum)
  1057. return -ERANGE;
  1058. if (ptr.p_s32[idx] < BITS_PER_LONG_LONG &&
  1059. (ctrl->menu_skip_mask & BIT_ULL(ptr.p_s32[idx])))
  1060. return -EINVAL;
  1061. if (ctrl->type == V4L2_CTRL_TYPE_MENU &&
  1062. ctrl->qmenu[ptr.p_s32[idx]][0] == '\0')
  1063. return -EINVAL;
  1064. return 0;
  1065. case V4L2_CTRL_TYPE_BITMASK:
  1066. ptr.p_s32[idx] &= ctrl->maximum;
  1067. return 0;
  1068. case V4L2_CTRL_TYPE_BUTTON:
  1069. case V4L2_CTRL_TYPE_CTRL_CLASS:
  1070. ptr.p_s32[idx] = 0;
  1071. return 0;
  1072. case V4L2_CTRL_TYPE_STRING:
  1073. idx *= ctrl->elem_size;
  1074. len = strlen(ptr.p_char + idx);
  1075. if (len < ctrl->minimum)
  1076. return -ERANGE;
  1077. if ((len - (u32)ctrl->minimum) % (u32)ctrl->step)
  1078. return -ERANGE;
  1079. return 0;
  1080. default:
  1081. return std_validate_compound(ctrl, idx, ptr);
  1082. }
  1083. }
  1084. int v4l2_ctrl_type_op_validate(const struct v4l2_ctrl *ctrl,
  1085. union v4l2_ctrl_ptr ptr)
  1086. {
  1087. unsigned int i;
  1088. int ret = 0;
  1089. switch ((u32)ctrl->type) {
  1090. case V4L2_CTRL_TYPE_U8:
  1091. if (ctrl->maximum == 0xff && ctrl->minimum == 0 && ctrl->step == 1)
  1092. return 0;
  1093. break;
  1094. case V4L2_CTRL_TYPE_U16:
  1095. if (ctrl->maximum == 0xffff && ctrl->minimum == 0 && ctrl->step == 1)
  1096. return 0;
  1097. break;
  1098. case V4L2_CTRL_TYPE_U32:
  1099. if (ctrl->maximum == 0xffffffff && ctrl->minimum == 0 && ctrl->step == 1)
  1100. return 0;
  1101. break;
  1102. case V4L2_CTRL_TYPE_BUTTON:
  1103. case V4L2_CTRL_TYPE_CTRL_CLASS:
  1104. memset(ptr.p_s32, 0, ctrl->new_elems * sizeof(s32));
  1105. return 0;
  1106. }
  1107. for (i = 0; !ret && i < ctrl->new_elems; i++)
  1108. ret = std_validate_elem(ctrl, i, ptr);
  1109. return ret;
  1110. }
  1111. EXPORT_SYMBOL(v4l2_ctrl_type_op_validate);
  1112. static const struct v4l2_ctrl_type_ops std_type_ops = {
  1113. .equal = v4l2_ctrl_type_op_equal,
  1114. .init = v4l2_ctrl_type_op_init,
  1115. .log = v4l2_ctrl_type_op_log,
  1116. .validate = v4l2_ctrl_type_op_validate,
  1117. };
  1118. void v4l2_ctrl_notify(struct v4l2_ctrl *ctrl, v4l2_ctrl_notify_fnc notify, void *priv)
  1119. {
  1120. if (!ctrl)
  1121. return;
  1122. if (!notify) {
  1123. ctrl->call_notify = 0;
  1124. return;
  1125. }
  1126. if (WARN_ON(ctrl->handler->notify && ctrl->handler->notify != notify))
  1127. return;
  1128. ctrl->handler->notify = notify;
  1129. ctrl->handler->notify_priv = priv;
  1130. ctrl->call_notify = 1;
  1131. }
  1132. EXPORT_SYMBOL(v4l2_ctrl_notify);
  1133. /* Copy the one value to another. */
  1134. static void ptr_to_ptr(struct v4l2_ctrl *ctrl,
  1135. union v4l2_ctrl_ptr from, union v4l2_ctrl_ptr to,
  1136. unsigned int elems)
  1137. {
  1138. if (ctrl == NULL)
  1139. return;
  1140. memcpy(to.p, from.p_const, elems * ctrl->elem_size);
  1141. }
  1142. /* Copy the new value to the current value. */
  1143. void new_to_cur(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags)
  1144. {
  1145. bool changed;
  1146. if (ctrl == NULL)
  1147. return;
  1148. /* has_changed is set by cluster_changed */
  1149. changed = ctrl->has_changed;
  1150. if (changed) {
  1151. if (ctrl->is_dyn_array)
  1152. ctrl->elems = ctrl->new_elems;
  1153. ptr_to_ptr(ctrl, ctrl->p_new, ctrl->p_cur, ctrl->elems);
  1154. }
  1155. if (ch_flags & V4L2_EVENT_CTRL_CH_FLAGS) {
  1156. /* Note: CH_FLAGS is only set for auto clusters. */
  1157. ctrl->flags &=
  1158. ~(V4L2_CTRL_FLAG_INACTIVE | V4L2_CTRL_FLAG_VOLATILE);
  1159. if (!is_cur_manual(ctrl->cluster[0])) {
  1160. ctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
  1161. if (ctrl->cluster[0]->has_volatiles)
  1162. ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
  1163. }
  1164. fh = NULL;
  1165. }
  1166. if (changed || ch_flags) {
  1167. /* If a control was changed that was not one of the controls
  1168. modified by the application, then send the event to all. */
  1169. if (!ctrl->is_new)
  1170. fh = NULL;
  1171. send_event(fh, ctrl,
  1172. (changed ? V4L2_EVENT_CTRL_CH_VALUE : 0) | ch_flags);
  1173. if (ctrl->call_notify && changed && ctrl->handler->notify)
  1174. ctrl->handler->notify(ctrl, ctrl->handler->notify_priv);
  1175. }
  1176. }
  1177. /* Copy the current value to the new value */
  1178. void cur_to_new(struct v4l2_ctrl *ctrl)
  1179. {
  1180. if (ctrl == NULL)
  1181. return;
  1182. if (ctrl->is_dyn_array)
  1183. ctrl->new_elems = ctrl->elems;
  1184. ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new, ctrl->new_elems);
  1185. }
  1186. static bool req_alloc_array(struct v4l2_ctrl_ref *ref, u32 elems)
  1187. {
  1188. void *tmp;
  1189. if (elems == ref->p_req_array_alloc_elems)
  1190. return true;
  1191. if (ref->ctrl->is_dyn_array &&
  1192. elems < ref->p_req_array_alloc_elems)
  1193. return true;
  1194. tmp = kvmalloc(elems * ref->ctrl->elem_size, GFP_KERNEL);
  1195. if (!tmp) {
  1196. ref->p_req_array_enomem = true;
  1197. return false;
  1198. }
  1199. ref->p_req_array_enomem = false;
  1200. kvfree(ref->p_req.p);
  1201. ref->p_req.p = tmp;
  1202. ref->p_req_array_alloc_elems = elems;
  1203. return true;
  1204. }
  1205. /* Copy the new value to the request value */
  1206. void new_to_req(struct v4l2_ctrl_ref *ref)
  1207. {
  1208. struct v4l2_ctrl *ctrl;
  1209. if (!ref)
  1210. return;
  1211. ctrl = ref->ctrl;
  1212. if (ctrl->is_array && !req_alloc_array(ref, ctrl->new_elems))
  1213. return;
  1214. ref->p_req_elems = ctrl->new_elems;
  1215. ptr_to_ptr(ctrl, ctrl->p_new, ref->p_req, ref->p_req_elems);
  1216. ref->p_req_valid = true;
  1217. }
  1218. /* Copy the current value to the request value */
  1219. void cur_to_req(struct v4l2_ctrl_ref *ref)
  1220. {
  1221. struct v4l2_ctrl *ctrl;
  1222. if (!ref)
  1223. return;
  1224. ctrl = ref->ctrl;
  1225. if (ctrl->is_array && !req_alloc_array(ref, ctrl->elems))
  1226. return;
  1227. ref->p_req_elems = ctrl->elems;
  1228. ptr_to_ptr(ctrl, ctrl->p_cur, ref->p_req, ctrl->elems);
  1229. ref->p_req_valid = true;
  1230. }
  1231. /* Copy the request value to the new value */
  1232. int req_to_new(struct v4l2_ctrl_ref *ref)
  1233. {
  1234. struct v4l2_ctrl *ctrl;
  1235. if (!ref)
  1236. return 0;
  1237. ctrl = ref->ctrl;
  1238. /*
  1239. * This control was never set in the request, so just use the current
  1240. * value.
  1241. */
  1242. if (!ref->p_req_valid) {
  1243. if (ctrl->is_dyn_array)
  1244. ctrl->new_elems = ctrl->elems;
  1245. ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new, ctrl->new_elems);
  1246. return 0;
  1247. }
  1248. /* Not an array, so just copy the request value */
  1249. if (!ctrl->is_array) {
  1250. ptr_to_ptr(ctrl, ref->p_req, ctrl->p_new, ctrl->new_elems);
  1251. return 0;
  1252. }
  1253. /* Sanity check, should never happen */
  1254. if (WARN_ON(!ref->p_req_array_alloc_elems))
  1255. return -ENOMEM;
  1256. if (!ctrl->is_dyn_array &&
  1257. ref->p_req_elems != ctrl->p_array_alloc_elems)
  1258. return -ENOMEM;
  1259. /*
  1260. * Check if the number of elements in the request is more than the
  1261. * elements in ctrl->p_array. If so, attempt to realloc ctrl->p_array.
  1262. * Note that p_array is allocated with twice the number of elements
  1263. * in the dynamic array since it has to store both the current and
  1264. * new value of such a control.
  1265. */
  1266. if (ref->p_req_elems > ctrl->p_array_alloc_elems) {
  1267. unsigned int sz = ref->p_req_elems * ctrl->elem_size;
  1268. void *old = ctrl->p_array;
  1269. void *tmp = kvzalloc(2 * sz, GFP_KERNEL);
  1270. if (!tmp)
  1271. return -ENOMEM;
  1272. memcpy(tmp, ctrl->p_new.p, ctrl->elems * ctrl->elem_size);
  1273. memcpy(tmp + sz, ctrl->p_cur.p, ctrl->elems * ctrl->elem_size);
  1274. ctrl->p_new.p = tmp;
  1275. ctrl->p_cur.p = tmp + sz;
  1276. ctrl->p_array = tmp;
  1277. ctrl->p_array_alloc_elems = ref->p_req_elems;
  1278. kvfree(old);
  1279. }
  1280. ctrl->new_elems = ref->p_req_elems;
  1281. ptr_to_ptr(ctrl, ref->p_req, ctrl->p_new, ctrl->new_elems);
  1282. return 0;
  1283. }
  1284. /* Control range checking */
  1285. int check_range(enum v4l2_ctrl_type type,
  1286. s64 min, s64 max, u64 step, s64 def)
  1287. {
  1288. switch (type) {
  1289. case V4L2_CTRL_TYPE_BOOLEAN:
  1290. if (step != 1 || max > 1 || min < 0)
  1291. return -ERANGE;
  1292. fallthrough;
  1293. case V4L2_CTRL_TYPE_U8:
  1294. case V4L2_CTRL_TYPE_U16:
  1295. case V4L2_CTRL_TYPE_U32:
  1296. case V4L2_CTRL_TYPE_INTEGER:
  1297. case V4L2_CTRL_TYPE_INTEGER64:
  1298. if (step == 0 || min > max || def < min || def > max)
  1299. return -ERANGE;
  1300. return 0;
  1301. case V4L2_CTRL_TYPE_BITMASK:
  1302. if (step || min || !max || (def & ~max))
  1303. return -ERANGE;
  1304. return 0;
  1305. case V4L2_CTRL_TYPE_MENU:
  1306. case V4L2_CTRL_TYPE_INTEGER_MENU:
  1307. if (min > max || def < min || def > max ||
  1308. min < 0 || (step && max >= BITS_PER_LONG_LONG))
  1309. return -ERANGE;
  1310. /* Note: step == menu_skip_mask for menu controls.
  1311. So here we check if the default value is masked out. */
  1312. if (def < BITS_PER_LONG_LONG && (step & BIT_ULL(def)))
  1313. return -EINVAL;
  1314. return 0;
  1315. case V4L2_CTRL_TYPE_STRING:
  1316. if (min > max || min < 0 || step < 1 || def)
  1317. return -ERANGE;
  1318. return 0;
  1319. default:
  1320. return 0;
  1321. }
  1322. }
  1323. /* Set the handler's error code if it wasn't set earlier already */
  1324. static inline int handler_set_err(struct v4l2_ctrl_handler *hdl, int err)
  1325. {
  1326. if (hdl->error == 0)
  1327. hdl->error = err;
  1328. return err;
  1329. }
  1330. /* Initialize the handler */
  1331. int v4l2_ctrl_handler_init_class(struct v4l2_ctrl_handler *hdl,
  1332. unsigned nr_of_controls_hint,
  1333. struct lock_class_key *key, const char *name)
  1334. {
  1335. mutex_init(&hdl->_lock);
  1336. hdl->lock = &hdl->_lock;
  1337. lockdep_set_class_and_name(hdl->lock, key, name);
  1338. INIT_LIST_HEAD(&hdl->ctrls);
  1339. INIT_LIST_HEAD(&hdl->ctrl_refs);
  1340. hdl->nr_of_buckets = 1 + nr_of_controls_hint / 8;
  1341. hdl->buckets = kvcalloc(hdl->nr_of_buckets, sizeof(hdl->buckets[0]),
  1342. GFP_KERNEL);
  1343. hdl->error = hdl->buckets ? 0 : -ENOMEM;
  1344. v4l2_ctrl_handler_init_request(hdl);
  1345. return hdl->error;
  1346. }
  1347. EXPORT_SYMBOL(v4l2_ctrl_handler_init_class);
  1348. /* Free all controls and control refs */
  1349. void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
  1350. {
  1351. struct v4l2_ctrl_ref *ref, *next_ref;
  1352. struct v4l2_ctrl *ctrl, *next_ctrl;
  1353. struct v4l2_subscribed_event *sev, *next_sev;
  1354. if (hdl == NULL || hdl->buckets == NULL)
  1355. return;
  1356. v4l2_ctrl_handler_free_request(hdl);
  1357. mutex_lock(hdl->lock);
  1358. /* Free all nodes */
  1359. list_for_each_entry_safe(ref, next_ref, &hdl->ctrl_refs, node) {
  1360. list_del(&ref->node);
  1361. if (ref->p_req_array_alloc_elems)
  1362. kvfree(ref->p_req.p);
  1363. kfree(ref);
  1364. }
  1365. /* Free all controls owned by the handler */
  1366. list_for_each_entry_safe(ctrl, next_ctrl, &hdl->ctrls, node) {
  1367. list_del(&ctrl->node);
  1368. list_for_each_entry_safe(sev, next_sev, &ctrl->ev_subs, node)
  1369. list_del(&sev->node);
  1370. kvfree(ctrl->p_array);
  1371. kvfree(ctrl);
  1372. }
  1373. kvfree(hdl->buckets);
  1374. hdl->buckets = NULL;
  1375. hdl->cached = NULL;
  1376. mutex_unlock(hdl->lock);
  1377. mutex_destroy(&hdl->_lock);
  1378. }
  1379. EXPORT_SYMBOL(v4l2_ctrl_handler_free);
  1380. /* For backwards compatibility: V4L2_CID_PRIVATE_BASE should no longer
  1381. be used except in G_CTRL, S_CTRL, QUERYCTRL and QUERYMENU when dealing
  1382. with applications that do not use the NEXT_CTRL flag.
  1383. We just find the n-th private user control. It's O(N), but that should not
  1384. be an issue in this particular case. */
  1385. static struct v4l2_ctrl_ref *find_private_ref(
  1386. struct v4l2_ctrl_handler *hdl, u32 id)
  1387. {
  1388. struct v4l2_ctrl_ref *ref;
  1389. id -= V4L2_CID_PRIVATE_BASE;
  1390. list_for_each_entry(ref, &hdl->ctrl_refs, node) {
  1391. /* Search for private user controls that are compatible with
  1392. VIDIOC_G/S_CTRL. */
  1393. if (V4L2_CTRL_ID2WHICH(ref->ctrl->id) == V4L2_CTRL_CLASS_USER &&
  1394. V4L2_CTRL_DRIVER_PRIV(ref->ctrl->id)) {
  1395. if (!ref->ctrl->is_int)
  1396. continue;
  1397. if (id == 0)
  1398. return ref;
  1399. id--;
  1400. }
  1401. }
  1402. return NULL;
  1403. }
  1404. /* Find a control with the given ID. */
  1405. struct v4l2_ctrl_ref *find_ref(struct v4l2_ctrl_handler *hdl, u32 id)
  1406. {
  1407. struct v4l2_ctrl_ref *ref;
  1408. int bucket;
  1409. id &= V4L2_CTRL_ID_MASK;
  1410. /* Old-style private controls need special handling */
  1411. if (id >= V4L2_CID_PRIVATE_BASE)
  1412. return find_private_ref(hdl, id);
  1413. bucket = id % hdl->nr_of_buckets;
  1414. /* Simple optimization: cache the last control found */
  1415. if (hdl->cached && hdl->cached->ctrl->id == id)
  1416. return hdl->cached;
  1417. /* Not in cache, search the hash */
  1418. ref = hdl->buckets ? hdl->buckets[bucket] : NULL;
  1419. while (ref && ref->ctrl->id != id)
  1420. ref = ref->next;
  1421. if (ref)
  1422. hdl->cached = ref; /* cache it! */
  1423. return ref;
  1424. }
  1425. /* Find a control with the given ID. Take the handler's lock first. */
  1426. struct v4l2_ctrl_ref *find_ref_lock(struct v4l2_ctrl_handler *hdl, u32 id)
  1427. {
  1428. struct v4l2_ctrl_ref *ref = NULL;
  1429. if (hdl) {
  1430. mutex_lock(hdl->lock);
  1431. ref = find_ref(hdl, id);
  1432. mutex_unlock(hdl->lock);
  1433. }
  1434. return ref;
  1435. }
  1436. /* Find a control with the given ID. */
  1437. struct v4l2_ctrl *v4l2_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)
  1438. {
  1439. struct v4l2_ctrl_ref *ref = find_ref_lock(hdl, id);
  1440. return ref ? ref->ctrl : NULL;
  1441. }
  1442. EXPORT_SYMBOL(v4l2_ctrl_find);
  1443. /* Allocate a new v4l2_ctrl_ref and hook it into the handler. */
  1444. int handler_new_ref(struct v4l2_ctrl_handler *hdl,
  1445. struct v4l2_ctrl *ctrl,
  1446. struct v4l2_ctrl_ref **ctrl_ref,
  1447. bool from_other_dev, bool allocate_req)
  1448. {
  1449. struct v4l2_ctrl_ref *ref;
  1450. struct v4l2_ctrl_ref *new_ref;
  1451. u32 id = ctrl->id;
  1452. u32 class_ctrl = V4L2_CTRL_ID2WHICH(id) | 1;
  1453. int bucket = id % hdl->nr_of_buckets; /* which bucket to use */
  1454. unsigned int size_extra_req = 0;
  1455. if (ctrl_ref)
  1456. *ctrl_ref = NULL;
  1457. /*
  1458. * Automatically add the control class if it is not yet present and
  1459. * the new control is not a compound control.
  1460. */
  1461. if (ctrl->type < V4L2_CTRL_COMPOUND_TYPES &&
  1462. id != class_ctrl && find_ref_lock(hdl, class_ctrl) == NULL)
  1463. if (!v4l2_ctrl_new_std(hdl, NULL, class_ctrl, 0, 0, 0, 0))
  1464. return hdl->error;
  1465. if (hdl->error)
  1466. return hdl->error;
  1467. if (allocate_req && !ctrl->is_array)
  1468. size_extra_req = ctrl->elems * ctrl->elem_size;
  1469. new_ref = kzalloc(sizeof(*new_ref) + size_extra_req, GFP_KERNEL);
  1470. if (!new_ref)
  1471. return handler_set_err(hdl, -ENOMEM);
  1472. new_ref->ctrl = ctrl;
  1473. new_ref->from_other_dev = from_other_dev;
  1474. if (size_extra_req)
  1475. new_ref->p_req.p = &new_ref[1];
  1476. INIT_LIST_HEAD(&new_ref->node);
  1477. mutex_lock(hdl->lock);
  1478. /* Add immediately at the end of the list if the list is empty, or if
  1479. the last element in the list has a lower ID.
  1480. This ensures that when elements are added in ascending order the
  1481. insertion is an O(1) operation. */
  1482. if (list_empty(&hdl->ctrl_refs) || id > node2id(hdl->ctrl_refs.prev)) {
  1483. list_add_tail(&new_ref->node, &hdl->ctrl_refs);
  1484. goto insert_in_hash;
  1485. }
  1486. /* Find insert position in sorted list */
  1487. list_for_each_entry(ref, &hdl->ctrl_refs, node) {
  1488. if (ref->ctrl->id < id)
  1489. continue;
  1490. /* Don't add duplicates */
  1491. if (ref->ctrl->id == id) {
  1492. kfree(new_ref);
  1493. goto unlock;
  1494. }
  1495. list_add(&new_ref->node, ref->node.prev);
  1496. break;
  1497. }
  1498. insert_in_hash:
  1499. /* Insert the control node in the hash */
  1500. new_ref->next = hdl->buckets[bucket];
  1501. hdl->buckets[bucket] = new_ref;
  1502. if (ctrl_ref)
  1503. *ctrl_ref = new_ref;
  1504. if (ctrl->handler == hdl) {
  1505. /* By default each control starts in a cluster of its own.
  1506. * new_ref->ctrl is basically a cluster array with one
  1507. * element, so that's perfect to use as the cluster pointer.
  1508. * But only do this for the handler that owns the control.
  1509. */
  1510. ctrl->cluster = &new_ref->ctrl;
  1511. ctrl->ncontrols = 1;
  1512. }
  1513. unlock:
  1514. mutex_unlock(hdl->lock);
  1515. return 0;
  1516. }
  1517. /* Add a new control */
  1518. static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
  1519. const struct v4l2_ctrl_ops *ops,
  1520. const struct v4l2_ctrl_type_ops *type_ops,
  1521. u32 id, const char *name, enum v4l2_ctrl_type type,
  1522. s64 min, s64 max, u64 step, s64 def,
  1523. const u32 dims[V4L2_CTRL_MAX_DIMS], u32 elem_size,
  1524. u32 flags, const char * const *qmenu,
  1525. const s64 *qmenu_int, const union v4l2_ctrl_ptr p_def,
  1526. void *priv)
  1527. {
  1528. struct v4l2_ctrl *ctrl;
  1529. unsigned sz_extra;
  1530. unsigned nr_of_dims = 0;
  1531. unsigned elems = 1;
  1532. bool is_array;
  1533. unsigned tot_ctrl_size;
  1534. void *data;
  1535. int err;
  1536. if (hdl->error)
  1537. return NULL;
  1538. while (dims && dims[nr_of_dims]) {
  1539. elems *= dims[nr_of_dims];
  1540. nr_of_dims++;
  1541. if (nr_of_dims == V4L2_CTRL_MAX_DIMS)
  1542. break;
  1543. }
  1544. is_array = nr_of_dims > 0;
  1545. /* Prefill elem_size for all types handled by std_type_ops */
  1546. switch ((u32)type) {
  1547. case V4L2_CTRL_TYPE_INTEGER64:
  1548. elem_size = sizeof(s64);
  1549. break;
  1550. case V4L2_CTRL_TYPE_STRING:
  1551. elem_size = max + 1;
  1552. break;
  1553. case V4L2_CTRL_TYPE_U8:
  1554. elem_size = sizeof(u8);
  1555. break;
  1556. case V4L2_CTRL_TYPE_U16:
  1557. elem_size = sizeof(u16);
  1558. break;
  1559. case V4L2_CTRL_TYPE_U32:
  1560. elem_size = sizeof(u32);
  1561. break;
  1562. case V4L2_CTRL_TYPE_MPEG2_SEQUENCE:
  1563. elem_size = sizeof(struct v4l2_ctrl_mpeg2_sequence);
  1564. break;
  1565. case V4L2_CTRL_TYPE_MPEG2_PICTURE:
  1566. elem_size = sizeof(struct v4l2_ctrl_mpeg2_picture);
  1567. break;
  1568. case V4L2_CTRL_TYPE_MPEG2_QUANTISATION:
  1569. elem_size = sizeof(struct v4l2_ctrl_mpeg2_quantisation);
  1570. break;
  1571. case V4L2_CTRL_TYPE_FWHT_PARAMS:
  1572. elem_size = sizeof(struct v4l2_ctrl_fwht_params);
  1573. break;
  1574. case V4L2_CTRL_TYPE_H264_SPS:
  1575. elem_size = sizeof(struct v4l2_ctrl_h264_sps);
  1576. break;
  1577. case V4L2_CTRL_TYPE_H264_PPS:
  1578. elem_size = sizeof(struct v4l2_ctrl_h264_pps);
  1579. break;
  1580. case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
  1581. elem_size = sizeof(struct v4l2_ctrl_h264_scaling_matrix);
  1582. break;
  1583. case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
  1584. elem_size = sizeof(struct v4l2_ctrl_h264_slice_params);
  1585. break;
  1586. case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
  1587. elem_size = sizeof(struct v4l2_ctrl_h264_decode_params);
  1588. break;
  1589. case V4L2_CTRL_TYPE_H264_PRED_WEIGHTS:
  1590. elem_size = sizeof(struct v4l2_ctrl_h264_pred_weights);
  1591. break;
  1592. case V4L2_CTRL_TYPE_VP8_FRAME:
  1593. elem_size = sizeof(struct v4l2_ctrl_vp8_frame);
  1594. break;
  1595. case V4L2_CTRL_TYPE_HEVC_SPS:
  1596. elem_size = sizeof(struct v4l2_ctrl_hevc_sps);
  1597. break;
  1598. case V4L2_CTRL_TYPE_HEVC_PPS:
  1599. elem_size = sizeof(struct v4l2_ctrl_hevc_pps);
  1600. break;
  1601. case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
  1602. elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params);
  1603. break;
  1604. case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
  1605. elem_size = sizeof(struct v4l2_ctrl_hevc_scaling_matrix);
  1606. break;
  1607. case V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS:
  1608. elem_size = sizeof(struct v4l2_ctrl_hevc_decode_params);
  1609. break;
  1610. case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
  1611. elem_size = sizeof(struct v4l2_ctrl_hdr10_cll_info);
  1612. break;
  1613. case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
  1614. elem_size = sizeof(struct v4l2_ctrl_hdr10_mastering_display);
  1615. break;
  1616. case V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR:
  1617. elem_size = sizeof(struct v4l2_ctrl_vp9_compressed_hdr);
  1618. break;
  1619. case V4L2_CTRL_TYPE_VP9_FRAME:
  1620. elem_size = sizeof(struct v4l2_ctrl_vp9_frame);
  1621. break;
  1622. case V4L2_CTRL_TYPE_AV1_SEQUENCE:
  1623. elem_size = sizeof(struct v4l2_ctrl_av1_sequence);
  1624. break;
  1625. case V4L2_CTRL_TYPE_AV1_TILE_GROUP_ENTRY:
  1626. elem_size = sizeof(struct v4l2_ctrl_av1_tile_group_entry);
  1627. break;
  1628. case V4L2_CTRL_TYPE_AV1_FRAME:
  1629. elem_size = sizeof(struct v4l2_ctrl_av1_frame);
  1630. break;
  1631. case V4L2_CTRL_TYPE_AV1_FILM_GRAIN:
  1632. elem_size = sizeof(struct v4l2_ctrl_av1_film_grain);
  1633. break;
  1634. case V4L2_CTRL_TYPE_AREA:
  1635. elem_size = sizeof(struct v4l2_area);
  1636. break;
  1637. default:
  1638. if (type < V4L2_CTRL_COMPOUND_TYPES)
  1639. elem_size = sizeof(s32);
  1640. break;
  1641. }
  1642. /* Sanity checks */
  1643. if (id == 0 || name == NULL || !elem_size ||
  1644. id >= V4L2_CID_PRIVATE_BASE ||
  1645. (type == V4L2_CTRL_TYPE_MENU && qmenu == NULL) ||
  1646. (type == V4L2_CTRL_TYPE_INTEGER_MENU && qmenu_int == NULL)) {
  1647. handler_set_err(hdl, -ERANGE);
  1648. return NULL;
  1649. }
  1650. err = check_range(type, min, max, step, def);
  1651. if (err) {
  1652. handler_set_err(hdl, err);
  1653. return NULL;
  1654. }
  1655. if (is_array &&
  1656. (type == V4L2_CTRL_TYPE_BUTTON ||
  1657. type == V4L2_CTRL_TYPE_CTRL_CLASS)) {
  1658. handler_set_err(hdl, -EINVAL);
  1659. return NULL;
  1660. }
  1661. if (flags & V4L2_CTRL_FLAG_DYNAMIC_ARRAY) {
  1662. /*
  1663. * For now only support this for one-dimensional arrays only.
  1664. *
  1665. * This can be relaxed in the future, but this will
  1666. * require more effort.
  1667. */
  1668. if (nr_of_dims != 1) {
  1669. handler_set_err(hdl, -EINVAL);
  1670. return NULL;
  1671. }
  1672. /* Start with just 1 element */
  1673. elems = 1;
  1674. }
  1675. tot_ctrl_size = elem_size * elems;
  1676. sz_extra = 0;
  1677. if (type == V4L2_CTRL_TYPE_BUTTON)
  1678. flags |= V4L2_CTRL_FLAG_WRITE_ONLY |
  1679. V4L2_CTRL_FLAG_EXECUTE_ON_WRITE;
  1680. else if (type == V4L2_CTRL_TYPE_CTRL_CLASS)
  1681. flags |= V4L2_CTRL_FLAG_READ_ONLY;
  1682. else if (!is_array &&
  1683. (type == V4L2_CTRL_TYPE_INTEGER64 ||
  1684. type == V4L2_CTRL_TYPE_STRING ||
  1685. type >= V4L2_CTRL_COMPOUND_TYPES))
  1686. sz_extra += 2 * tot_ctrl_size;
  1687. if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const)
  1688. sz_extra += elem_size;
  1689. ctrl = kvzalloc(sizeof(*ctrl) + sz_extra, GFP_KERNEL);
  1690. if (ctrl == NULL) {
  1691. handler_set_err(hdl, -ENOMEM);
  1692. return NULL;
  1693. }
  1694. INIT_LIST_HEAD(&ctrl->node);
  1695. INIT_LIST_HEAD(&ctrl->ev_subs);
  1696. ctrl->handler = hdl;
  1697. ctrl->ops = ops;
  1698. ctrl->type_ops = type_ops ? type_ops : &std_type_ops;
  1699. ctrl->id = id;
  1700. ctrl->name = name;
  1701. ctrl->type = type;
  1702. ctrl->flags = flags;
  1703. ctrl->minimum = min;
  1704. ctrl->maximum = max;
  1705. ctrl->step = step;
  1706. ctrl->default_value = def;
  1707. ctrl->is_string = !is_array && type == V4L2_CTRL_TYPE_STRING;
  1708. ctrl->is_ptr = is_array || type >= V4L2_CTRL_COMPOUND_TYPES || ctrl->is_string;
  1709. ctrl->is_int = !ctrl->is_ptr && type != V4L2_CTRL_TYPE_INTEGER64;
  1710. ctrl->is_array = is_array;
  1711. ctrl->is_dyn_array = !!(flags & V4L2_CTRL_FLAG_DYNAMIC_ARRAY);
  1712. ctrl->elems = elems;
  1713. ctrl->new_elems = elems;
  1714. ctrl->nr_of_dims = nr_of_dims;
  1715. if (nr_of_dims)
  1716. memcpy(ctrl->dims, dims, nr_of_dims * sizeof(dims[0]));
  1717. ctrl->elem_size = elem_size;
  1718. if (type == V4L2_CTRL_TYPE_MENU)
  1719. ctrl->qmenu = qmenu;
  1720. else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
  1721. ctrl->qmenu_int = qmenu_int;
  1722. ctrl->priv = priv;
  1723. ctrl->cur.val = ctrl->val = def;
  1724. data = &ctrl[1];
  1725. if (ctrl->is_array) {
  1726. ctrl->p_array_alloc_elems = elems;
  1727. ctrl->p_array = kvzalloc(2 * elems * elem_size, GFP_KERNEL);
  1728. if (!ctrl->p_array) {
  1729. kvfree(ctrl);
  1730. return NULL;
  1731. }
  1732. data = ctrl->p_array;
  1733. }
  1734. if (!ctrl->is_int) {
  1735. ctrl->p_new.p = data;
  1736. ctrl->p_cur.p = data + tot_ctrl_size;
  1737. } else {
  1738. ctrl->p_new.p = &ctrl->val;
  1739. ctrl->p_cur.p = &ctrl->cur.val;
  1740. }
  1741. if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const) {
  1742. if (ctrl->is_array)
  1743. ctrl->p_def.p = &ctrl[1];
  1744. else
  1745. ctrl->p_def.p = ctrl->p_cur.p + tot_ctrl_size;
  1746. memcpy(ctrl->p_def.p, p_def.p_const, elem_size);
  1747. }
  1748. ctrl->type_ops->init(ctrl, 0, ctrl->p_cur);
  1749. cur_to_new(ctrl);
  1750. if (handler_new_ref(hdl, ctrl, NULL, false, false)) {
  1751. kvfree(ctrl->p_array);
  1752. kvfree(ctrl);
  1753. return NULL;
  1754. }
  1755. mutex_lock(hdl->lock);
  1756. list_add_tail(&ctrl->node, &hdl->ctrls);
  1757. mutex_unlock(hdl->lock);
  1758. return ctrl;
  1759. }
  1760. struct v4l2_ctrl *v4l2_ctrl_new_custom(struct v4l2_ctrl_handler *hdl,
  1761. const struct v4l2_ctrl_config *cfg, void *priv)
  1762. {
  1763. bool is_menu;
  1764. struct v4l2_ctrl *ctrl;
  1765. const char *name = cfg->name;
  1766. const char * const *qmenu = cfg->qmenu;
  1767. const s64 *qmenu_int = cfg->qmenu_int;
  1768. enum v4l2_ctrl_type type = cfg->type;
  1769. u32 flags = cfg->flags;
  1770. s64 min = cfg->min;
  1771. s64 max = cfg->max;
  1772. u64 step = cfg->step;
  1773. s64 def = cfg->def;
  1774. if (name == NULL)
  1775. v4l2_ctrl_fill(cfg->id, &name, &type, &min, &max, &step,
  1776. &def, &flags);
  1777. is_menu = (type == V4L2_CTRL_TYPE_MENU ||
  1778. type == V4L2_CTRL_TYPE_INTEGER_MENU);
  1779. if (is_menu)
  1780. WARN_ON(step);
  1781. else
  1782. WARN_ON(cfg->menu_skip_mask);
  1783. if (type == V4L2_CTRL_TYPE_MENU && !qmenu) {
  1784. qmenu = v4l2_ctrl_get_menu(cfg->id);
  1785. } else if (type == V4L2_CTRL_TYPE_INTEGER_MENU && !qmenu_int) {
  1786. handler_set_err(hdl, -EINVAL);
  1787. return NULL;
  1788. }
  1789. ctrl = v4l2_ctrl_new(hdl, cfg->ops, cfg->type_ops, cfg->id, name,
  1790. type, min, max,
  1791. is_menu ? cfg->menu_skip_mask : step, def,
  1792. cfg->dims, cfg->elem_size,
  1793. flags, qmenu, qmenu_int, cfg->p_def, priv);
  1794. if (ctrl)
  1795. ctrl->is_private = cfg->is_private;
  1796. return ctrl;
  1797. }
  1798. EXPORT_SYMBOL(v4l2_ctrl_new_custom);
  1799. /* Helper function for standard non-menu controls */
  1800. struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl,
  1801. const struct v4l2_ctrl_ops *ops,
  1802. u32 id, s64 min, s64 max, u64 step, s64 def)
  1803. {
  1804. const char *name;
  1805. enum v4l2_ctrl_type type;
  1806. u32 flags;
  1807. v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
  1808. if (type == V4L2_CTRL_TYPE_MENU ||
  1809. type == V4L2_CTRL_TYPE_INTEGER_MENU ||
  1810. type >= V4L2_CTRL_COMPOUND_TYPES) {
  1811. handler_set_err(hdl, -EINVAL);
  1812. return NULL;
  1813. }
  1814. return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
  1815. min, max, step, def, NULL, 0,
  1816. flags, NULL, NULL, ptr_null, NULL);
  1817. }
  1818. EXPORT_SYMBOL(v4l2_ctrl_new_std);
  1819. /* Helper function for standard menu controls */
  1820. struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl,
  1821. const struct v4l2_ctrl_ops *ops,
  1822. u32 id, u8 _max, u64 mask, u8 _def)
  1823. {
  1824. const char * const *qmenu = NULL;
  1825. const s64 *qmenu_int = NULL;
  1826. unsigned int qmenu_int_len = 0;
  1827. const char *name;
  1828. enum v4l2_ctrl_type type;
  1829. s64 min;
  1830. s64 max = _max;
  1831. s64 def = _def;
  1832. u64 step;
  1833. u32 flags;
  1834. v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
  1835. if (type == V4L2_CTRL_TYPE_MENU)
  1836. qmenu = v4l2_ctrl_get_menu(id);
  1837. else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
  1838. qmenu_int = v4l2_ctrl_get_int_menu(id, &qmenu_int_len);
  1839. if ((!qmenu && !qmenu_int) || (qmenu_int && max >= qmenu_int_len)) {
  1840. handler_set_err(hdl, -EINVAL);
  1841. return NULL;
  1842. }
  1843. return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
  1844. 0, max, mask, def, NULL, 0,
  1845. flags, qmenu, qmenu_int, ptr_null, NULL);
  1846. }
  1847. EXPORT_SYMBOL(v4l2_ctrl_new_std_menu);
  1848. /* Helper function for standard menu controls with driver defined menu */
  1849. struct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(struct v4l2_ctrl_handler *hdl,
  1850. const struct v4l2_ctrl_ops *ops, u32 id, u8 _max,
  1851. u64 mask, u8 _def, const char * const *qmenu)
  1852. {
  1853. enum v4l2_ctrl_type type;
  1854. const char *name;
  1855. u32 flags;
  1856. u64 step;
  1857. s64 min;
  1858. s64 max = _max;
  1859. s64 def = _def;
  1860. /* v4l2_ctrl_new_std_menu_items() should only be called for
  1861. * standard controls without a standard menu.
  1862. */
  1863. if (v4l2_ctrl_get_menu(id)) {
  1864. handler_set_err(hdl, -EINVAL);
  1865. return NULL;
  1866. }
  1867. v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
  1868. if (type != V4L2_CTRL_TYPE_MENU || qmenu == NULL) {
  1869. handler_set_err(hdl, -EINVAL);
  1870. return NULL;
  1871. }
  1872. return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
  1873. 0, max, mask, def, NULL, 0,
  1874. flags, qmenu, NULL, ptr_null, NULL);
  1875. }
  1876. EXPORT_SYMBOL(v4l2_ctrl_new_std_menu_items);
  1877. /* Helper function for standard compound controls */
  1878. struct v4l2_ctrl *v4l2_ctrl_new_std_compound(struct v4l2_ctrl_handler *hdl,
  1879. const struct v4l2_ctrl_ops *ops, u32 id,
  1880. const union v4l2_ctrl_ptr p_def)
  1881. {
  1882. const char *name;
  1883. enum v4l2_ctrl_type type;
  1884. u32 flags;
  1885. s64 min, max, step, def;
  1886. v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
  1887. if (type < V4L2_CTRL_COMPOUND_TYPES) {
  1888. handler_set_err(hdl, -EINVAL);
  1889. return NULL;
  1890. }
  1891. return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
  1892. min, max, step, def, NULL, 0,
  1893. flags, NULL, NULL, p_def, NULL);
  1894. }
  1895. EXPORT_SYMBOL(v4l2_ctrl_new_std_compound);
  1896. /* Helper function for standard integer menu controls */
  1897. struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl,
  1898. const struct v4l2_ctrl_ops *ops,
  1899. u32 id, u8 _max, u8 _def, const s64 *qmenu_int)
  1900. {
  1901. const char *name;
  1902. enum v4l2_ctrl_type type;
  1903. s64 min;
  1904. u64 step;
  1905. s64 max = _max;
  1906. s64 def = _def;
  1907. u32 flags;
  1908. v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
  1909. if (type != V4L2_CTRL_TYPE_INTEGER_MENU) {
  1910. handler_set_err(hdl, -EINVAL);
  1911. return NULL;
  1912. }
  1913. return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
  1914. 0, max, 0, def, NULL, 0,
  1915. flags, NULL, qmenu_int, ptr_null, NULL);
  1916. }
  1917. EXPORT_SYMBOL(v4l2_ctrl_new_int_menu);
  1918. /* Add the controls from another handler to our own. */
  1919. int v4l2_ctrl_add_handler(struct v4l2_ctrl_handler *hdl,
  1920. struct v4l2_ctrl_handler *add,
  1921. bool (*filter)(const struct v4l2_ctrl *ctrl),
  1922. bool from_other_dev)
  1923. {
  1924. struct v4l2_ctrl_ref *ref;
  1925. int ret = 0;
  1926. /* Do nothing if either handler is NULL or if they are the same */
  1927. if (!hdl || !add || hdl == add)
  1928. return 0;
  1929. if (hdl->error)
  1930. return hdl->error;
  1931. mutex_lock(add->lock);
  1932. list_for_each_entry(ref, &add->ctrl_refs, node) {
  1933. struct v4l2_ctrl *ctrl = ref->ctrl;
  1934. /* Skip handler-private controls. */
  1935. if (ctrl->is_private)
  1936. continue;
  1937. /* And control classes */
  1938. if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
  1939. continue;
  1940. /* Filter any unwanted controls */
  1941. if (filter && !filter(ctrl))
  1942. continue;
  1943. ret = handler_new_ref(hdl, ctrl, NULL, from_other_dev, false);
  1944. if (ret)
  1945. break;
  1946. }
  1947. mutex_unlock(add->lock);
  1948. return ret;
  1949. }
  1950. EXPORT_SYMBOL(v4l2_ctrl_add_handler);
  1951. bool v4l2_ctrl_radio_filter(const struct v4l2_ctrl *ctrl)
  1952. {
  1953. if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_TX)
  1954. return true;
  1955. if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_RX)
  1956. return true;
  1957. switch (ctrl->id) {
  1958. case V4L2_CID_AUDIO_MUTE:
  1959. case V4L2_CID_AUDIO_VOLUME:
  1960. case V4L2_CID_AUDIO_BALANCE:
  1961. case V4L2_CID_AUDIO_BASS:
  1962. case V4L2_CID_AUDIO_TREBLE:
  1963. case V4L2_CID_AUDIO_LOUDNESS:
  1964. return true;
  1965. default:
  1966. break;
  1967. }
  1968. return false;
  1969. }
  1970. EXPORT_SYMBOL(v4l2_ctrl_radio_filter);
  1971. /* Cluster controls */
  1972. void v4l2_ctrl_cluster(unsigned ncontrols, struct v4l2_ctrl **controls)
  1973. {
  1974. bool has_volatiles = false;
  1975. int i;
  1976. /* The first control is the master control and it must not be NULL */
  1977. if (WARN_ON(ncontrols == 0 || controls[0] == NULL))
  1978. return;
  1979. for (i = 0; i < ncontrols; i++) {
  1980. if (controls[i]) {
  1981. controls[i]->cluster = controls;
  1982. controls[i]->ncontrols = ncontrols;
  1983. if (controls[i]->flags & V4L2_CTRL_FLAG_VOLATILE)
  1984. has_volatiles = true;
  1985. }
  1986. }
  1987. controls[0]->has_volatiles = has_volatiles;
  1988. }
  1989. EXPORT_SYMBOL(v4l2_ctrl_cluster);
  1990. void v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls,
  1991. u8 manual_val, bool set_volatile)
  1992. {
  1993. struct v4l2_ctrl *master = controls[0];
  1994. u32 flag = 0;
  1995. int i;
  1996. v4l2_ctrl_cluster(ncontrols, controls);
  1997. WARN_ON(ncontrols <= 1);
  1998. WARN_ON(manual_val < master->minimum || manual_val > master->maximum);
  1999. WARN_ON(set_volatile && !has_op(master, g_volatile_ctrl));
  2000. master->is_auto = true;
  2001. master->has_volatiles = set_volatile;
  2002. master->manual_mode_value = manual_val;
  2003. master->flags |= V4L2_CTRL_FLAG_UPDATE;
  2004. if (!is_cur_manual(master))
  2005. flag = V4L2_CTRL_FLAG_INACTIVE |
  2006. (set_volatile ? V4L2_CTRL_FLAG_VOLATILE : 0);
  2007. for (i = 1; i < ncontrols; i++)
  2008. if (controls[i])
  2009. controls[i]->flags |= flag;
  2010. }
  2011. EXPORT_SYMBOL(v4l2_ctrl_auto_cluster);
  2012. /*
  2013. * Obtain the current volatile values of an autocluster and mark them
  2014. * as new.
  2015. */
  2016. void update_from_auto_cluster(struct v4l2_ctrl *master)
  2017. {
  2018. int i;
  2019. for (i = 1; i < master->ncontrols; i++)
  2020. cur_to_new(master->cluster[i]);
  2021. if (!call_op(master, g_volatile_ctrl))
  2022. for (i = 1; i < master->ncontrols; i++)
  2023. if (master->cluster[i])
  2024. master->cluster[i]->is_new = 1;
  2025. }
  2026. /*
  2027. * Return non-zero if one or more of the controls in the cluster has a new
  2028. * value that differs from the current value.
  2029. */
  2030. static int cluster_changed(struct v4l2_ctrl *master)
  2031. {
  2032. bool changed = false;
  2033. int i;
  2034. for (i = 0; i < master->ncontrols; i++) {
  2035. struct v4l2_ctrl *ctrl = master->cluster[i];
  2036. bool ctrl_changed = false;
  2037. if (!ctrl)
  2038. continue;
  2039. if (ctrl->flags & V4L2_CTRL_FLAG_EXECUTE_ON_WRITE) {
  2040. changed = true;
  2041. ctrl_changed = true;
  2042. }
  2043. /*
  2044. * Set has_changed to false to avoid generating
  2045. * the event V4L2_EVENT_CTRL_CH_VALUE
  2046. */
  2047. if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE) {
  2048. ctrl->has_changed = false;
  2049. continue;
  2050. }
  2051. if (ctrl->elems != ctrl->new_elems)
  2052. ctrl_changed = true;
  2053. if (!ctrl_changed)
  2054. ctrl_changed = !ctrl->type_ops->equal(ctrl,
  2055. ctrl->p_cur, ctrl->p_new);
  2056. ctrl->has_changed = ctrl_changed;
  2057. changed |= ctrl->has_changed;
  2058. }
  2059. return changed;
  2060. }
  2061. /*
  2062. * Core function that calls try/s_ctrl and ensures that the new value is
  2063. * copied to the current value on a set.
  2064. * Must be called with ctrl->handler->lock held.
  2065. */
  2066. int try_or_set_cluster(struct v4l2_fh *fh, struct v4l2_ctrl *master,
  2067. bool set, u32 ch_flags)
  2068. {
  2069. bool update_flag;
  2070. int ret;
  2071. int i;
  2072. /*
  2073. * Go through the cluster and either validate the new value or
  2074. * (if no new value was set), copy the current value to the new
  2075. * value, ensuring a consistent view for the control ops when
  2076. * called.
  2077. */
  2078. for (i = 0; i < master->ncontrols; i++) {
  2079. struct v4l2_ctrl *ctrl = master->cluster[i];
  2080. if (!ctrl)
  2081. continue;
  2082. if (!ctrl->is_new) {
  2083. cur_to_new(ctrl);
  2084. continue;
  2085. }
  2086. /*
  2087. * Check again: it may have changed since the
  2088. * previous check in try_or_set_ext_ctrls().
  2089. */
  2090. if (set && (ctrl->flags & V4L2_CTRL_FLAG_GRABBED))
  2091. return -EBUSY;
  2092. }
  2093. ret = call_op(master, try_ctrl);
  2094. /* Don't set if there is no change */
  2095. if (ret || !set || !cluster_changed(master))
  2096. return ret;
  2097. ret = call_op(master, s_ctrl);
  2098. if (ret)
  2099. return ret;
  2100. /* If OK, then make the new values permanent. */
  2101. update_flag = is_cur_manual(master) != is_new_manual(master);
  2102. for (i = 0; i < master->ncontrols; i++) {
  2103. /*
  2104. * If we switch from auto to manual mode, and this cluster
  2105. * contains volatile controls, then all non-master controls
  2106. * have to be marked as changed. The 'new' value contains
  2107. * the volatile value (obtained by update_from_auto_cluster),
  2108. * which now has to become the current value.
  2109. */
  2110. if (i && update_flag && is_new_manual(master) &&
  2111. master->has_volatiles && master->cluster[i])
  2112. master->cluster[i]->has_changed = true;
  2113. new_to_cur(fh, master->cluster[i], ch_flags |
  2114. ((update_flag && i > 0) ? V4L2_EVENT_CTRL_CH_FLAGS : 0));
  2115. }
  2116. return 0;
  2117. }
  2118. /* Activate/deactivate a control. */
  2119. void v4l2_ctrl_activate(struct v4l2_ctrl *ctrl, bool active)
  2120. {
  2121. /* invert since the actual flag is called 'inactive' */
  2122. bool inactive = !active;
  2123. bool old;
  2124. if (ctrl == NULL)
  2125. return;
  2126. if (inactive)
  2127. /* set V4L2_CTRL_FLAG_INACTIVE */
  2128. old = test_and_set_bit(4, &ctrl->flags);
  2129. else
  2130. /* clear V4L2_CTRL_FLAG_INACTIVE */
  2131. old = test_and_clear_bit(4, &ctrl->flags);
  2132. if (old != inactive)
  2133. send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
  2134. }
  2135. EXPORT_SYMBOL(v4l2_ctrl_activate);
  2136. void __v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed)
  2137. {
  2138. bool old;
  2139. if (ctrl == NULL)
  2140. return;
  2141. lockdep_assert_held(ctrl->handler->lock);
  2142. if (grabbed)
  2143. /* set V4L2_CTRL_FLAG_GRABBED */
  2144. old = test_and_set_bit(1, &ctrl->flags);
  2145. else
  2146. /* clear V4L2_CTRL_FLAG_GRABBED */
  2147. old = test_and_clear_bit(1, &ctrl->flags);
  2148. if (old != grabbed)
  2149. send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
  2150. }
  2151. EXPORT_SYMBOL(__v4l2_ctrl_grab);
  2152. /* Call s_ctrl for all controls owned by the handler */
  2153. int __v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl)
  2154. {
  2155. struct v4l2_ctrl *ctrl;
  2156. int ret = 0;
  2157. if (hdl == NULL)
  2158. return 0;
  2159. lockdep_assert_held(hdl->lock);
  2160. list_for_each_entry(ctrl, &hdl->ctrls, node)
  2161. ctrl->done = false;
  2162. list_for_each_entry(ctrl, &hdl->ctrls, node) {
  2163. struct v4l2_ctrl *master = ctrl->cluster[0];
  2164. int i;
  2165. /* Skip if this control was already handled by a cluster. */
  2166. /* Skip button controls and read-only controls. */
  2167. if (ctrl->done || ctrl->type == V4L2_CTRL_TYPE_BUTTON ||
  2168. (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY))
  2169. continue;
  2170. for (i = 0; i < master->ncontrols; i++) {
  2171. if (master->cluster[i]) {
  2172. cur_to_new(master->cluster[i]);
  2173. master->cluster[i]->is_new = 1;
  2174. master->cluster[i]->done = true;
  2175. }
  2176. }
  2177. ret = call_op(master, s_ctrl);
  2178. if (ret)
  2179. break;
  2180. }
  2181. return ret;
  2182. }
  2183. EXPORT_SYMBOL_GPL(__v4l2_ctrl_handler_setup);
  2184. int v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl)
  2185. {
  2186. int ret;
  2187. if (hdl == NULL)
  2188. return 0;
  2189. mutex_lock(hdl->lock);
  2190. ret = __v4l2_ctrl_handler_setup(hdl);
  2191. mutex_unlock(hdl->lock);
  2192. return ret;
  2193. }
  2194. EXPORT_SYMBOL(v4l2_ctrl_handler_setup);
  2195. /* Log the control name and value */
  2196. static void log_ctrl(const struct v4l2_ctrl *ctrl,
  2197. const char *prefix, const char *colon)
  2198. {
  2199. if (ctrl->flags & (V4L2_CTRL_FLAG_DISABLED | V4L2_CTRL_FLAG_WRITE_ONLY))
  2200. return;
  2201. if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
  2202. return;
  2203. pr_info("%s%s%s: ", prefix, colon, ctrl->name);
  2204. ctrl->type_ops->log(ctrl);
  2205. if (ctrl->flags & (V4L2_CTRL_FLAG_INACTIVE |
  2206. V4L2_CTRL_FLAG_GRABBED |
  2207. V4L2_CTRL_FLAG_VOLATILE)) {
  2208. if (ctrl->flags & V4L2_CTRL_FLAG_INACTIVE)
  2209. pr_cont(" inactive");
  2210. if (ctrl->flags & V4L2_CTRL_FLAG_GRABBED)
  2211. pr_cont(" grabbed");
  2212. if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE)
  2213. pr_cont(" volatile");
  2214. }
  2215. pr_cont("\n");
  2216. }
  2217. /* Log all controls owned by the handler */
  2218. void v4l2_ctrl_handler_log_status(struct v4l2_ctrl_handler *hdl,
  2219. const char *prefix)
  2220. {
  2221. struct v4l2_ctrl *ctrl;
  2222. const char *colon = "";
  2223. int len;
  2224. if (!hdl)
  2225. return;
  2226. if (!prefix)
  2227. prefix = "";
  2228. len = strlen(prefix);
  2229. if (len && prefix[len - 1] != ' ')
  2230. colon = ": ";
  2231. mutex_lock(hdl->lock);
  2232. list_for_each_entry(ctrl, &hdl->ctrls, node)
  2233. if (!(ctrl->flags & V4L2_CTRL_FLAG_DISABLED))
  2234. log_ctrl(ctrl, prefix, colon);
  2235. mutex_unlock(hdl->lock);
  2236. }
  2237. EXPORT_SYMBOL(v4l2_ctrl_handler_log_status);
  2238. int v4l2_ctrl_new_fwnode_properties(struct v4l2_ctrl_handler *hdl,
  2239. const struct v4l2_ctrl_ops *ctrl_ops,
  2240. const struct v4l2_fwnode_device_properties *p)
  2241. {
  2242. if (hdl->error)
  2243. return hdl->error;
  2244. if (p->orientation != V4L2_FWNODE_PROPERTY_UNSET) {
  2245. u32 orientation_ctrl;
  2246. switch (p->orientation) {
  2247. case V4L2_FWNODE_ORIENTATION_FRONT:
  2248. orientation_ctrl = V4L2_CAMERA_ORIENTATION_FRONT;
  2249. break;
  2250. case V4L2_FWNODE_ORIENTATION_BACK:
  2251. orientation_ctrl = V4L2_CAMERA_ORIENTATION_BACK;
  2252. break;
  2253. case V4L2_FWNODE_ORIENTATION_EXTERNAL:
  2254. orientation_ctrl = V4L2_CAMERA_ORIENTATION_EXTERNAL;
  2255. break;
  2256. default:
  2257. return -EINVAL;
  2258. }
  2259. if (!v4l2_ctrl_new_std_menu(hdl, ctrl_ops,
  2260. V4L2_CID_CAMERA_ORIENTATION,
  2261. V4L2_CAMERA_ORIENTATION_EXTERNAL, 0,
  2262. orientation_ctrl))
  2263. return hdl->error;
  2264. }
  2265. if (p->rotation != V4L2_FWNODE_PROPERTY_UNSET) {
  2266. if (!v4l2_ctrl_new_std(hdl, ctrl_ops,
  2267. V4L2_CID_CAMERA_SENSOR_ROTATION,
  2268. p->rotation, p->rotation, 1,
  2269. p->rotation))
  2270. return hdl->error;
  2271. }
  2272. return hdl->error;
  2273. }
  2274. EXPORT_SYMBOL(v4l2_ctrl_new_fwnode_properties);