linux/Documentation/zh_CN/video4linux/v4l2-framework.txt
<<
>>
Prefs
   1Chinese translated version of Documentation/video4linux/v4l2-framework.txt
   2
   3If you have any comment or update to the content, please contact the
   4original document maintainer directly.  However, if you have a problem
   5communicating in English you can also ask the Chinese maintainer for
   6help.  Contact the Chinese maintainer if this translation is outdated
   7or if there is a problem with the translation.
   8
   9Maintainer: Mauro Carvalho Chehab <mchehab@infradead.org>
  10Chinese maintainer: Fu Wei <tekkamanninja@gmail.com>
  11---------------------------------------------------------------------
  12Documentation/video4linux/v4l2-framework.txt \xE7\x9A\x84\xE4\xB8\xAD\xE6\x96\x87\xE7\xBF\xBB\xE8\xAF\x91
  13
  14\xE5\xA6\x82\xE6\x9E\x9C\xE6\x83\xB3\xE8\xAF\x84\xE8\xAE\xBA\xE6\x88\x96\xE6\x9B\xB4\xE6\x96\xB0\xE6\x9C\xAC\xE6\x96\x87\xE7\x9A\x84\xE5\x86\x85\xE5\xAE\xB9\xEF\xBC\x8C\xE8\xAF\xB7\xE7\x9B\xB4\xE6\x8E\xA5\xE8\x81\x94\xE7\xB3\xBB\xE5\x8E\x9F\xE6\x96\x87\xE6\xA1\xA3\xE7\x9A\x84\xE7\xBB\xB4\xE6\x8A\xA4\xE8\x80\x85\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE4\xBD\xBF\xE7\x94\xA8\xE8\x8B\xB1\xE6\x96\x87
  15\xE4\xBA\xA4\xE6\xB5\x81\xE6\x9C\x89\xE5\x9B\xB0\xE9\x9A\xBE\xE7\x9A\x84\xE8\xAF\x9D\xEF\xBC\x8C\xE4\xB9\x9F\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x90\x91\xE4\xB8\xAD\xE6\x96\x87\xE7\x89\x88\xE7\xBB\xB4\xE6\x8A\xA4\xE8\x80\x85\xE6\xB1\x82\xE5\x8A\xA9\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE6\x9C\xAC\xE7\xBF\xBB\xE8\xAF\x91\xE6\x9B\xB4\xE6\x96\xB0\xE4\xB8\x8D\xE5\x8F\x8A\xE6\x97\xB6\xE6\x88\x96\xE8\x80\x85\xE7\xBF\xBB
  16\xE8\xAF\x91\xE5\xAD\x98\xE5\x9C\xA8\xE9\x97\xAE\xE9\xA2\x98\xEF\xBC\x8C\xE8\xAF\xB7\xE8\x81\x94\xE7\xB3\xBB\xE4\xB8\xAD\xE6\x96\x87\xE7\x89\x88\xE7\xBB\xB4\xE6\x8A\xA4\xE8\x80\x85\xE3\x80\x82
  17\xE8\x8B\xB1\xE6\x96\x87\xE7\x89\x88\xE7\xBB\xB4\xE6\x8A\xA4\xE8\x80\x85\xEF\xBC\x9A Mauro Carvalho Chehab <mchehab@infradead.org>
  18\xE4\xB8\xAD\xE6\x96\x87\xE7\x89\x88\xE7\xBB\xB4\xE6\x8A\xA4\xE8\x80\x85\xEF\xBC\x9A \xE5\x82\x85\xE7\x82\x9C Fu Wei <tekkamanninja@gmail.com>
  19\xE4\xB8\xAD\xE6\x96\x87\xE7\x89\x88\xE7\xBF\xBB\xE8\xAF\x91\xE8\x80\x85\xEF\xBC\x9A \xE5\x82\x85\xE7\x82\x9C Fu Wei <tekkamanninja@gmail.com>
  20\xE4\xB8\xAD\xE6\x96\x87\xE7\x89\x88\xE6\xA0\xA1\xE8\xAF\x91\xE8\x80\x85\xEF\xBC\x9A \xE5\x82\x85\xE7\x82\x9C Fu Wei <tekkamanninja@gmail.com>
  21
  22
  23\xE4\xBB\xA5\xE4\xB8\x8B\xE4\xB8\xBA\xE6\xAD\xA3\xE6\x96\x87
  24---------------------------------------------------------------------
  25V4L2 \xE9\xA9\xB1\xE5\x8A\xA8\xE6\xA1\x86\xE6\x9E\xB6\xE6\xA6\x82\xE8\xA7\x88
  26==============
  27
  28\xE6\x9C\xAC\xE6\x96\x87\xE6\xA1\xA3\xE6\x8F\x8F\xE8\xBF\xB0 V4L2 \xE6\xA1\x86\xE6\x9E\xB6\xE6\x89\x80\xE6\x8F\x90\xE4\xBE\x9B\xE7\x9A\x84\xE5\x90\x84\xE7\xA7\x8D\xE7\xBB\x93\xE6\x9E\x84\xE5\x92\x8C\xE5\xAE\x83\xE4\xBB\xAC\xE4\xB9\x8B\xE9\x97\xB4\xE7\x9A\x84\xE5\x85\xB3\xE7\xB3\xBB\xE3\x80\x82
  29
  30
  31\xE4\xBB\x8B\xE7\xBB\x8D
  32----
  33
  34\xE5\xA4\xA7\xE9\x83\xA8\xE5\x88\x86\xE7\x8E\xB0\xE4\xBB\xA3 V4L2 \xE8\xAE\xBE\xE5\xA4\x87\xE7\x94\xB1\xE5\xA4\x9A\xE4\xB8\xAA IC \xE7\xBB\x84\xE6\x88\x90\xEF\xBC\x8C\xE5\x9C\xA8 /dev \xE4\xB8\x8B\xE5\xAF\xBC\xE5\x87\xBA\xE5\xA4\x9A\xE4\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xEF\xBC\x8C
  35\xE5\xB9\xB6\xE5\x90\x8C\xE6\x97\xB6\xE5\x88\x9B\xE5\xBB\xBA\xE9\x9D\x9E V4L2 \xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x88\xE5\xA6\x82 DVB\xE3\x80\x81ALSA\xE3\x80\x81FB\xE3\x80\x81I2C \xE5\x92\x8C\xE7\xBA\xA2\xE5\xA4\x96\xE8\xBE\x93\xE5\x85\xA5\xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x89\xE3\x80\x82
  36\xE7\x94\xB1\xE4\xBA\x8E\xE8\xBF\x99\xE7\xA7\x8D\xE7\xA1\xAC\xE4\xBB\xB6\xE7\x9A\x84\xE5\xA4\x8D\xE6\x9D\x82\xE6\x80\xA7\xEF\xBC\x8CV4L2 \xE9\xA9\xB1\xE5\x8A\xA8\xE4\xB9\x9F\xE5\x8F\x98\xE5\xBE\x97\xE9\x9D\x9E\xE5\xB8\xB8\xE5\xA4\x8D\xE6\x9D\x82\xE3\x80\x82
  37
  38\xE5\xB0\xA4\xE5\x85\xB6\xE6\x98\xAF V4L2 \xE5\xBF\x85\xE9\xA1\xBB\xE6\x94\xAF\xE6\x8C\x81 IC \xE5\xAE\x9E\xE7\x8E\xB0\xE9\x9F\xB3\xE8\xA7\x86\xE9\xA2\x91\xE7\x9A\x84\xE5\xA4\x9A\xE8\xB7\xAF\xE5\xA4\x8D\xE7\x94\xA8\xE5\x92\x8C\xE7\xBC\x96\xE8\xA7\xA3\xE7\xA0\x81\xEF\xBC\x8C\xE8\xBF\x99\xE5\xB0\xB1\xE6\x9B\xB4\xE5\xA2\x9E\xE5\x8A\xA0\xE4\xBA\x86\xE5\x85\xB6
  39\xE5\xA4\x8D\xE6\x9D\x82\xE6\x80\xA7\xE3\x80\x82\xE9\x80\x9A\xE5\xB8\xB8\xE8\xBF\x99\xE4\xBA\x9B IC \xE9\x80\x9A\xE8\xBF\x87\xE4\xB8\x80\xE4\xB8\xAA\xE6\x88\x96\xE5\xA4\x9A\xE4\xB8\xAA I2C \xE6\x80\xBB\xE7\xBA\xBF\xE8\xBF\x9E\xE6\x8E\xA5\xE5\x88\xB0\xE4\xB8\xBB\xE6\xA1\xA5\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x99\xA8\xEF\xBC\x8C\xE4\xBD\x86\xE4\xB9\x9F\xE5\x8F\xAF
  40\xE4\xBD\xBF\xE7\x94\xA8\xE5\x85\xB6\xE4\xBB\x96\xE6\x80\xBB\xE7\xBA\xBF\xE3\x80\x82\xE8\xBF\x99\xE4\xBA\x9B\xE8\xAE\xBE\xE5\xA4\x87\xE7\xA7\xB0\xE4\xB8\xBA\xE2\x80\x9C\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE2\x80\x9D\xE3\x80\x82
  41
  42\xE9\x95\xBF\xE6\x9C\x9F\xE4\xBB\xA5\xE6\x9D\xA5\xEF\xBC\x8C\xE8\xBF\x99\xE4\xB8\xAA\xE6\xA1\x86\xE6\x9E\xB6\xE4\xBB\x85\xE9\x99\x90\xE4\xBA\x8E\xE9\x80\x9A\xE8\xBF\x87 video_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE5\x88\x9B\xE5\xBB\xBA V4L \xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xEF\xBC\x8C
  43\xE5\xB9\xB6\xE4\xBD\xBF\xE7\x94\xA8 video_buf \xE5\xA4\x84\xE7\x90\x86\xE8\xA7\x86\xE9\xA2\x91\xE7\xBC\x93\xE5\x86\xB2\xEF\xBC\x88\xE6\xB3\xA8\xEF\xBC\x9A\xE6\x9C\xAC\xE6\x96\x87\xE4\xB8\x8D\xE8\xAE\xA8\xE8\xAE\xBA video_buf \xE6\xA1\x86\xE6\x9E\xB6\xEF\xBC\x89\xE3\x80\x82
  44
  45\xE8\xBF\x99\xE6\x84\x8F\xE5\x91\xB3\xE7\x9D\x80\xE6\x89\x80\xE6\x9C\x89\xE9\xA9\xB1\xE5\x8A\xA8\xE5\xBF\x85\xE9\xA1\xBB\xE8\x87\xAA\xE5\xB7\xB1\xE8\xAE\xBE\xE7\xBD\xAE\xE8\xAE\xBE\xE5\xA4\x87\xE5\xAE\x9E\xE4\xBE\x8B\xE5\xB9\xB6\xE8\xBF\x9E\xE6\x8E\xA5\xE5\x88\xB0\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE3\x80\x82\xE5\x85\xB6\xE4\xB8\xAD\xE4\xB8\x80\xE9\x83\xA8\xE5\x88\x86\xE8\xA6\x81\xE6\xAD\xA3\xE7\xA1\xAE\xE5\x9C\xB0
  46\xE5\xAE\x8C\xE6\x88\x90\xE6\x98\xAF\xE6\xAF\x94\xE8\xBE\x83\xE5\xA4\x8D\xE6\x9D\x82\xE7\x9A\x84\xEF\xBC\x8C\xE4\xBD\xBF\xE5\xBE\x97\xE8\xAE\xB8\xE5\xA4\x9A\xE9\xA9\xB1\xE5\x8A\xA8\xE9\x83\xBD\xE6\xB2\xA1\xE6\x9C\x89\xE6\xAD\xA3\xE7\xA1\xAE\xE5\x9C\xB0\xE5\xAE\x9E\xE7\x8E\xB0\xE3\x80\x82
  47
  48\xE7\x94\xB1\xE4\xBA\x8E\xE6\xA1\x86\xE6\x9E\xB6\xE7\x9A\x84\xE7\xBC\xBA\xE5\xA4\xB1\xEF\xBC\x8C\xE6\x9C\x89\xE5\xBE\x88\xE5\xA4\x9A\xE9\x80\x9A\xE7\x94\xA8\xE4\xBB\xA3\xE7\xA0\x81\xE9\x83\xBD\xE4\xB8\x8D\xE5\x8F\xAF\xE9\x87\x8D\xE5\xA4\x8D\xE5\x88\xA9\xE7\x94\xA8\xE3\x80\x82
  49
  50\xE5\x9B\xA0\xE6\xAD\xA4\xEF\xBC\x8C\xE8\xBF\x99\xE4\xB8\xAA\xE6\xA1\x86\xE6\x9E\xB6\xE6\x9E\x84\xE5\xBB\xBA\xE6\x89\x80\xE6\x9C\x89\xE9\xA9\xB1\xE5\x8A\xA8\xE9\x83\xBD\xE9\x9C\x80\xE8\xA6\x81\xE7\x9A\x84\xE5\x9F\xBA\xE6\x9C\xAC\xE7\xBB\x93\xE6\x9E\x84\xE5\x9D\x97\xEF\xBC\x8C\xE8\x80\x8C\xE7\xBB\x9F\xE4\xB8\x80\xE7\x9A\x84\xE6\xA1\x86\xE6\x9E\xB6\xE5\xB0\x86\xE4\xBD\xBF\xE9\x80\x9A\xE7\x94\xA8\xE4\xBB\xA3\xE7\xA0\x81
  51\xE5\x88\x9B\xE5\xBB\xBA\xE6\x88\x90\xE5\xAE\x9E\xE7\x94\xA8\xE5\x87\xBD\xE6\x95\xB0\xE5\xB9\xB6\xE5\x9C\xA8\xE6\x89\x80\xE6\x9C\x89\xE9\xA9\xB1\xE5\x8A\xA8\xE4\xB8\xAD\xE5\x85\xB1\xE4\xBA\xAB\xE5\x8F\x98\xE5\xBE\x97\xE6\x9B\xB4\xE5\x8A\xA0\xE5\xAE\xB9\xE6\x98\x93\xE3\x80\x82
  52
  53
  54\xE9\xA9\xB1\xE5\x8A\xA8\xE7\xBB\x93\xE6\x9E\x84
  55-------
  56
  57\xE6\x89\x80\xE6\x9C\x89 V4L2 \xE9\xA9\xB1\xE5\x8A\xA8\xE9\x83\xBD\xE6\x9C\x89\xE5\xA6\x82\xE4\xB8\x8B\xE7\xBB\x93\xE6\x9E\x84\xEF\xBC\x9A
  58
  591) \xE6\xAF\x8F\xE4\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE5\xAE\x9E\xE4\xBE\x8B\xE7\x9A\x84\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93--\xE5\x8C\x85\xE5\x90\xAB\xE5\x85\xB6\xE8\xAE\xBE\xE5\xA4\x87\xE7\x8A\xB6\xE6\x80\x81\xE3\x80\x82
  60
  612) \xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96\xE5\x92\x8C\xE6\x8E\xA7\xE5\x88\xB6\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84\xE6\x96\xB9\xE6\xB3\x95\xEF\xBC\x88\xE5\xA6\x82\xE6\x9E\x9C\xE6\x9C\x89\xEF\xBC\x89\xE3\x80\x82
  62
  633) \xE5\x88\x9B\xE5\xBB\xBA V4L2 \xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9 (/dev/videoX\xE3\x80\x81/dev/vbiX \xE5\x92\x8C /dev/radioX)
  64   \xE5\xB9\xB6\xE8\xB7\x9F\xE8\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE7\x9A\x84\xE7\x89\xB9\xE5\xAE\x9A\xE6\x95\xB0\xE6\x8D\xAE\xE3\x80\x82
  65
  664) \xE7\x89\xB9\xE5\xAE\x9A\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93--\xE5\x8C\x85\xE5\x90\xAB\xE6\xAF\x8F\xE4\xB8\xAA\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xE7\x9A\x84\xE6\x95\xB0\xE6\x8D\xAE\xE3\x80\x82
  67
  685) \xE8\xA7\x86\xE9\xA2\x91\xE7\xBC\x93\xE5\x86\xB2\xE5\xA4\x84\xE7\x90\x86\xE3\x80\x82
  69
  70\xE4\xBB\xA5\xE4\xB8\x8B\xE6\x98\xAF\xE5\xAE\x83\xE4\xBB\xAC\xE7\x9A\x84\xE5\x88\x9D\xE7\x95\xA5\xE5\x85\xB3\xE7\xB3\xBB\xE5\x9B\xBE\xEF\xBC\x9A
  71
  72    device instances\xEF\xBC\x88\xE8\xAE\xBE\xE5\xA4\x87\xE5\xAE\x9E\xE4\xBE\x8B\xEF\xBC\x89
  73      |
  74      +-sub-device instances\xEF\xBC\x88\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE5\xAE\x9E\xE4\xBE\x8B\xEF\xBC\x89
  75      |
  76      \-V4L2 device nodes\xEF\xBC\x88V4L2 \xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xEF\xBC\x89
  77          |
  78          \-filehandle instances\xEF\xBC\x88\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xE5\xAE\x9E\xE4\xBE\x8B\xEF\xBC\x89
  79
  80
  81\xE6\xA1\x86\xE6\x9E\xB6\xE7\xBB\x93\xE6\x9E\x84
  82-------
  83
  84\xE8\xAF\xA5\xE6\xA1\x86\xE6\x9E\xB6\xE9\x9D\x9E\xE5\xB8\xB8\xE7\xB1\xBB\xE4\xBC\xBC\xE9\xA9\xB1\xE5\x8A\xA8\xE7\xBB\x93\xE6\x9E\x84\xEF\xBC\x9A\xE5\xAE\x83\xE6\x9C\x89\xE4\xB8\x80\xE4\xB8\xAA v4l2_device \xE7\xBB\x93\xE6\x9E\x84\xE7\x94\xA8\xE4\xBA\x8E\xE4\xBF\x9D\xE5\xAD\x98\xE8\xAE\xBE\xE5\xA4\x87
  85\xE5\xAE\x9E\xE4\xBE\x8B\xE7\x9A\x84\xE6\x95\xB0\xE6\x8D\xAE\xEF\xBC\x9B\xE4\xB8\x80\xE4\xB8\xAA v4l2_subdev \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xBB\xA3\xE8\xA1\xA8\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE5\xAE\x9E\xE4\xBE\x8B\xEF\xBC\x9Bvideo_device
  86\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xBF\x9D\xE5\xAD\x98 V4L2 \xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE7\x9A\x84\xE6\x95\xB0\xE6\x8D\xAE\xEF\xBC\x9B\xE5\xB0\x86\xE6\x9D\xA5 v4l2_fh \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE5\xB0\x86\xE8\xB7\x9F\xE8\xB8\xAA\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84
  87\xE5\xAE\x9E\xE4\xBE\x8B\xEF\xBC\x88\xE6\x9A\x82\xE6\x9C\xAA\xE5\xB0\x9A\xE6\x9C\xAA\xE5\xAE\x9E\xE7\x8E\xB0\xEF\xBC\x89\xE3\x80\x82
  88
  89V4L2 \xE6\xA1\x86\xE6\x9E\xB6\xE4\xB9\x9F\xE5\x8F\xAF\xE4\xB8\x8E\xE5\xAA\x92\xE4\xBD\x93\xE6\xA1\x86\xE6\x9E\xB6\xE6\x95\xB4\xE5\x90\x88\xEF\xBC\x88\xE5\x8F\xAF\xE9\x80\x89\xE7\x9A\x84\xEF\xBC\x89\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE9\xA9\xB1\xE5\x8A\xA8\xE8\xAE\xBE\xE7\xBD\xAE\xE4\xBA\x86 v4l2_device
  90\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE7\x9A\x84 mdev \xE5\x9F\x9F\xEF\xBC\x8C\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE5\x92\x8C\xE8\xA7\x86\xE9\xA2\x91\xE8\x8A\x82\xE7\x82\xB9\xE7\x9A\x84\xE5\x85\xA5\xE5\x8F\xA3\xE5\xB0\x86\xE8\x87\xAA\xE5\x8A\xA8\xE5\x87\xBA\xE7\x8E\xB0\xE5\x9C\xA8\xE5\xAA\x92\xE4\xBD\x93\xE6\xA1\x86\xE6\x9E\xB6\xE4\xB8\xAD\xE3\x80\x82
  91
  92
  93v4l2_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93
  94----------------
  95
  96\xE6\xAF\x8F\xE4\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE5\xAE\x9E\xE4\xBE\x8B\xE9\x83\xBD\xE9\x80\x9A\xE8\xBF\x87 v4l2_device (v4l2-device.h)\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE6\x9D\xA5\xE8\xA1\xA8\xE7\xA4\xBA\xE3\x80\x82
  97\xE7\xAE\x80\xE5\x8D\x95\xE8\xAE\xBE\xE5\xA4\x87\xE5\x8F\xAF\xE4\xBB\xA5\xE4\xBB\x85\xE5\x88\x86\xE9\x85\x8D\xE8\xBF\x99\xE4\xB8\xAA\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xEF\xBC\x8C\xE4\xBD\x86\xE5\x9C\xA8\xE5\xA4\xA7\xE5\xA4\x9A\xE6\x95\xB0\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xEF\xBC\x8C\xE9\x83\xBD\xE4\xBC\x9A\xE5\xB0\x86\xE8\xBF\x99\xE4\xB8\xAA\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93
  98\xE5\xB5\x8C\xE5\x85\xA5\xE5\x88\xB0\xE4\xB8\x80\xE4\xB8\xAA\xE6\x9B\xB4\xE5\xA4\xA7\xE7\x9A\x84\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE3\x80\x82
  99
 100\xE4\xBD\xA0\xE5\xBF\x85\xE9\xA1\xBB\xE6\xB3\xA8\xE5\x86\x8C\xE8\xBF\x99\xE4\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE5\xAE\x9E\xE4\xBE\x8B\xEF\xBC\x9A
 101
 102        v4l2_device_register(struct device *dev, struct v4l2_device *v4l2_dev);
 103
 104\xE6\xB3\xA8\xE5\x86\x8C\xE6\x93\x8D\xE4\xBD\x9C\xE5\xB0\x86\xE4\xBC\x9A\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96 v4l2_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C dev->driver_data \xE5\x9F\x9F
 105\xE4\xB8\xBA NULL\xEF\xBC\x8C\xE5\xB0\xB1\xE5\xB0\x86\xE5\x85\xB6\xE6\x8C\x87\xE5\x90\x91 v4l2_dev\xE3\x80\x82
 106
 107\xE9\x9C\x80\xE8\xA6\x81\xE4\xB8\x8E\xE5\xAA\x92\xE4\xBD\x93\xE6\xA1\x86\xE6\x9E\xB6\xE6\x95\xB4\xE5\x90\x88\xE7\x9A\x84\xE9\xA9\xB1\xE5\x8A\xA8\xE5\xBF\x85\xE9\xA1\xBB\xE6\x89\x8B\xE5\x8A\xA8\xE8\xAE\xBE\xE7\xBD\xAE dev->driver_data\xEF\xBC\x8C\xE6\x8C\x87\xE5\x90\x91\xE5\x8C\x85\xE5\x90\xAB
 108v4l2_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE5\xAE\x9E\xE4\xBE\x8B\xE7\x9A\x84\xE9\xA9\xB1\xE5\x8A\xA8\xE7\x89\xB9\xE5\xAE\x9A\xE8\xAE\xBE\xE5\xA4\x87\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE3\x80\x82\xE8\xBF\x99\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x9C\xA8\xE6\xB3\xA8\xE5\x86\x8C V4L2 \xE8\xAE\xBE\xE5\xA4\x87
 109\xE5\xAE\x9E\xE4\xBE\x8B\xE5\x89\x8D\xE9\x80\x9A\xE8\xBF\x87 dev_set_drvdata() \xE5\x87\xBD\xE6\x95\xB0\xE5\xAE\x8C\xE6\x88\x90\xE3\x80\x82\xE5\x90\x8C\xE6\x97\xB6\xE5\xBF\x85\xE9\xA1\xBB\xE8\xAE\xBE\xE7\xBD\xAE v4l2_device
 110\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE7\x9A\x84 mdev \xE5\x9F\x9F\xEF\xBC\x8C\xE6\x8C\x87\xE5\x90\x91\xE9\x80\x82\xE5\xBD\x93\xE7\x9A\x84\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96\xE5\xB9\xB6\xE6\xB3\xA8\xE5\x86\x8C\xE8\xBF\x87\xE7\x9A\x84 media_device \xE5\xAE\x9E\xE4\xBE\x8B\xE3\x80\x82
 111
 112\xE5\xA6\x82\xE6\x9E\x9C v4l2_dev->name \xE4\xB8\xBA\xE7\xA9\xBA\xEF\xBC\x8C\xE5\x88\x99\xE5\xAE\x83\xE5\xB0\x86\xE8\xA2\xAB\xE8\xAE\xBE\xE7\xBD\xAE\xE4\xB8\xBA\xE4\xBB\x8E dev \xE4\xB8\xAD\xE8\xA1\x8D\xE7\x94\x9F\xE5\x87\xBA\xE7\x9A\x84\xE5\x80\xBC\xEF\xBC\x88\xE4\xB8\xBA\xE4\xBA\x86
 113\xE6\x9B\xB4\xE5\x8A\xA0\xE7\xB2\xBE\xE7\xA1\xAE\xEF\xBC\x8C\xE5\xBD\xA2\xE5\xBC\x8F\xE4\xB8\xBA\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x90\x8D\xE5\x90\x8E\xE8\xB7\x9F bus_id\xEF\xBC\x89\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE5\x9C\xA8\xE8\xB0\x83\xE7\x94\xA8 v4l2_device_register
 114\xE5\x89\x8D\xE5\xB7\xB2\xE7\xBB\x8F\xE8\xAE\xBE\xE7\xBD\xAE\xE5\xA5\xBD\xE4\xBA\x86\xEF\xBC\x8C\xE5\x88\x99\xE4\xB8\x8D\xE4\xBC\x9A\xE8\xA2\xAB\xE4\xBF\xAE\xE6\x94\xB9\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C dev \xE4\xB8\xBA NULL\xEF\xBC\x8C\xE5\x88\x99\xE4\xBD\xA0*\xE5\xBF\x85\xE9\xA1\xBB*\xE5\x9C\xA8\xE8\xB0\x83\xE7\x94\xA8
 115v4l2_device_register \xE5\x89\x8D\xE8\xAE\xBE\xE7\xBD\xAE v4l2_dev->name\xE3\x80\x82
 116
 117\xE4\xBD\xA0\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x9F\xBA\xE4\xBA\x8E\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x90\x8D\xE5\x92\x8C\xE9\xA9\xB1\xE5\x8A\xA8\xE7\x9A\x84\xE5\x85\xA8\xE5\xB1\x80 atomic_t \xE7\xB1\xBB\xE5\x9E\x8B\xE7\x9A\x84\xE5\xAE\x9E\xE4\xBE\x8B\xE7\xBC\x96\xE5\x8F\xB7\xEF\xBC\x8C\xE9\x80\x9A\xE8\xBF\x87
 118v4l2_device_set_name() \xE8\xAE\xBE\xE7\xBD\xAE name\xE3\x80\x82\xE8\xBF\x99\xE6\xA0\xB7\xE4\xBC\x9A\xE7\x94\x9F\xE6\x88\x90\xE7\xB1\xBB\xE4\xBC\xBC ivtv0\xE3\x80\x81ivtv1 \xE7\xAD\x89
 119\xE5\x90\x8D\xE5\xAD\x97\xE3\x80\x82\xE8\x8B\xA5\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x90\x8D\xE4\xBB\xA5\xE6\x95\xB0\xE5\xAD\x97\xE7\xBB\x93\xE5\xB0\xBE\xEF\xBC\x8C\xE5\x88\x99\xE4\xBC\x9A\xE5\x9C\xA8\xE7\xBC\x96\xE5\x8F\xB7\xE5\x92\x8C\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x90\x8D\xE9\x97\xB4\xE6\x8F\x92\xE5\x85\xA5\xE4\xB8\x80\xE4\xB8\xAA\xE7\xA0\xB4\xE6\x8A\x98\xE5\x8F\xB7\xEF\xBC\x8C\xE5\xA6\x82\xEF\xBC\x9A
 120cx18-0\xE3\x80\x81cx18-1 \xE7\xAD\x89\xE3\x80\x82\xE6\xAD\xA4\xE5\x87\xBD\xE6\x95\xB0\xE8\xBF\x94\xE5\x9B\x9E\xE5\xAE\x9E\xE4\xBE\x8B\xE7\xBC\x96\xE5\x8F\xB7\xE3\x80\x82
 121
 122\xE7\xAC\xAC\xE4\xB8\x80\xE4\xB8\xAA \xE2\x80\x9Cdev\xE2\x80\x9D \xE5\x8F\x82\xE6\x95\xB0\xE9\x80\x9A\xE5\xB8\xB8\xE6\x98\xAF\xE4\xB8\x80\xE4\xB8\xAA\xE6\x8C\x87\xE5\x90\x91 pci_dev\xE3\x80\x81usb_interface \xE6\x88\x96
 123platform_device \xE7\x9A\x84\xE6\x8C\x87\xE9\x92\x88\xE3\x80\x82\xE5\xBE\x88\xE5\xB0\x91\xE4\xBD\xBF\xE5\x85\xB6\xE4\xB8\xBA NULL\xEF\xBC\x8C\xE9\x99\xA4\xE9\x9D\x9E\xE6\x98\xAF\xE4\xB8\x80\xE4\xB8\xAAISA\xE8\xAE\xBE\xE5\xA4\x87\xE6\x88\x96\xE8\x80\x85
 124\xE5\xBD\x93\xE4\xB8\x80\xE4\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE5\x88\x9B\xE5\xBB\xBA\xE4\xBA\x86\xE5\xA4\x9A\xE4\xB8\xAA PCI \xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x8C\xE4\xBD\xBF\xE5\xBE\x97 v4l2_dev \xE6\x97\xA0\xE6\xB3\x95\xE4\xB8\x8E\xE4\xB8\x80\xE4\xB8\xAA\xE7\x89\xB9\xE5\xAE\x9A\xE7\x9A\x84\xE7\x88\xB6\xE8\xAE\xBE\xE5\xA4\x87
 125\xE5\x85\xB3\xE8\x81\x94\xE3\x80\x82
 126
 127\xE4\xBD\xA0\xE4\xB9\x9F\xE5\x8F\xAF\xE4\xBB\xA5\xE6\x8F\x90\xE4\xBE\x9B\xE4\xB8\x80\xE4\xB8\xAA notify() \xE5\x9B\x9E\xE8\xB0\x83\xEF\xBC\x8C\xE4\xBD\xBF\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE5\x8F\xAF\xE4\xBB\xA5\xE8\xB0\x83\xE7\x94\xA8\xE5\xAE\x83\xE5\xAE\x9E\xE7\x8E\xB0\xE4\xBA\x8B\xE4\xBB\xB6\xE9\x80\x9A\xE7\x9F\xA5\xE3\x80\x82
 128\xE4\xBD\x86\xE8\xBF\x99\xE4\xB8\xAA\xE8\xAE\xBE\xE7\xBD\xAE\xE4\xB8\x8E\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9B\xB8\xE5\x85\xB3\xE3\x80\x82\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE6\x94\xAF\xE6\x8C\x81\xE7\x9A\x84\xE4\xBB\xBB\xE4\xBD\x95\xE9\x80\x9A\xE7\x9F\xA5\xE5\xBF\x85\xE9\xA1\xBB\xE5\x9C\xA8
 129include/media/<subdevice>.h \xE4\xB8\xAD\xE5\xAE\x9A\xE4\xB9\x89\xE4\xB8\x80\xE4\xB8\xAA\xE6\xB6\x88\xE6\x81\xAF\xE5\xA4\xB4\xE3\x80\x82
 130
 131\xE6\xB3\xA8\xE9\x94\x80 v4l2_device \xE4\xBD\xBF\xE7\x94\xA8\xE5\xA6\x82\xE4\xB8\x8B\xE5\x87\xBD\xE6\x95\xB0\xEF\xBC\x9A
 132
 133        v4l2_device_unregister(struct v4l2_device *v4l2_dev);
 134
 135\xE5\xA6\x82\xE6\x9E\x9C dev->driver_data \xE5\x9F\x9F\xE6\x8C\x87\xE5\x90\x91 v4l2_dev\xEF\xBC\x8C\xE5\xB0\x86\xE4\xBC\x9A\xE8\xA2\xAB\xE9\x87\x8D\xE7\xBD\xAE\xE4\xB8\xBA NULL\xE3\x80\x82\xE6\xB3\xA8\xE9\x94\x80\xE5\x90\x8C\xE6\x97\xB6
 136\xE4\xBC\x9A\xE8\x87\xAA\xE5\x8A\xA8\xE4\xBB\x8E\xE8\xAE\xBE\xE5\xA4\x87\xE4\xB8\xAD\xE6\xB3\xA8\xE9\x94\x80\xE6\x89\x80\xE6\x9C\x89\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE3\x80\x82
 137
 138\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE6\x9C\x89\xE4\xB8\x80\xE4\xB8\xAA\xE7\x83\xAD\xE6\x8F\x92\xE6\x8B\x94\xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x88\xE5\xA6\x82USB\xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x89\xEF\xBC\x8C\xE5\x88\x99\xE5\xBD\x93\xE6\x96\xAD\xE5\xBC\x80\xE5\x8F\x91\xE7\x94\x9F\xE6\x97\xB6\xEF\xBC\x8C\xE7\x88\xB6\xE8\xAE\xBE\xE5\xA4\x87\xE5\xB0\x86\xE6\x97\xA0\xE6\x95\x88\xE3\x80\x82
 139\xE7\x94\xB1\xE4\xBA\x8E v4l2_device \xE6\x9C\x89\xE4\xB8\x80\xE4\xB8\xAA\xE6\x8C\x87\xE5\x90\x91\xE7\x88\xB6\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84\xE6\x8C\x87\xE9\x92\x88\xE5\xBF\x85\xE9\xA1\xBB\xE8\xA2\xAB\xE6\xB8\x85\xE9\x99\xA4\xEF\xBC\x8C\xE5\x90\x8C\xE6\x97\xB6\xE6\xA0\x87\xE5\xBF\x97\xE7\x88\xB6\xE8\xAE\xBE\xE5\xA4\x87
 140\xE5\xB7\xB2\xE6\xB6\x88\xE5\xA4\xB1\xEF\xBC\x8C\xE6\x89\x80\xE4\xBB\xA5\xE5\xBF\x85\xE9\xA1\xBB\xE8\xB0\x83\xE7\x94\xA8\xE4\xBB\xA5\xE4\xB8\x8B\xE5\x87\xBD\xE6\x95\xB0\xEF\xBC\x9A
 141
 142        v4l2_device_disconnect(struct v4l2_device *v4l2_dev);
 143
 144\xE8\xBF\x99\xE4\xB8\xAA\xE5\x87\xBD\xE6\x95\xB0\xE5\xB9\xB6*\xE4\xB8\x8D*\xE6\xB3\xA8\xE9\x94\x80\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x8C\xE5\x9B\xA0\xE6\xAD\xA4\xE4\xBD\xA0\xE4\xBE\x9D\xE7\x84\xB6\xE8\xA6\x81\xE8\xB0\x83\xE7\x94\xA8 v4l2_device_unregister()
 145\xE5\x87\xBD\xE6\x95\xB0\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE7\x9A\x84\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x99\xA8\xE5\xB9\xB6\xE9\x9D\x9E\xE7\x83\xAD\xE6\x8F\x92\xE6\x8B\x94\xE7\x9A\x84\xEF\xBC\x8C\xE5\xB0\xB1\xE6\xB2\xA1\xE6\x9C\x89\xE5\xBF\x85\xE8\xA6\x81\xE8\xB0\x83\xE7\x94\xA8 v4l2_device_disconnect()\xE3\x80\x82
 146
 147\xE6\x9C\x89\xE6\x97\xB6\xE4\xBD\xA0\xE9\x9C\x80\xE8\xA6\x81\xE9\x81\x8D\xE5\x8E\x86\xE6\x89\x80\xE6\x9C\x89\xE8\xA2\xAB\xE7\x89\xB9\xE5\xAE\x9A\xE9\xA9\xB1\xE5\x8A\xA8\xE6\xB3\xA8\xE5\x86\x8C\xE7\x9A\x84\xE8\xAE\xBE\xE5\xA4\x87\xE3\x80\x82\xE8\xBF\x99\xE9\x80\x9A\xE5\xB8\xB8\xE5\x8F\x91\xE7\x94\x9F\xE5\x9C\xA8\xE5\xA4\x9A\xE4\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE9\xA9\xB1\xE5\x8A\xA8\xE4\xBD\xBF\xE7\x94\xA8
 148\xE5\x90\x8C\xE4\xB8\x80\xE4\xB8\xAA\xE7\xA1\xAC\xE4\xBB\xB6\xE7\x9A\x84\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xE3\x80\x82\xE5\xA6\x82\xEF\xBC\x9Aivtvfb \xE9\xA9\xB1\xE5\x8A\xA8\xE6\x98\xAF\xE4\xB8\x80\xE4\xB8\xAA\xE4\xBD\xBF\xE7\x94\xA8 ivtv \xE7\xA1\xAC\xE4\xBB\xB6\xE7\x9A\x84\xE5\xB8\xA7\xE7\xBC\x93\xE5\x86\xB2\xE9\xA9\xB1\xE5\x8A\xA8\xEF\xBC\x8C
 149\xE5\x90\x8C\xE6\x97\xB6 alsa \xE9\xA9\xB1\xE5\x8A\xA8\xE4\xB9\x9F\xE4\xBD\xBF\xE7\x94\xA8\xE6\xAD\xA4\xE7\xA1\xAC\xE4\xBB\xB6\xE3\x80\x82
 150
 151\xE4\xBD\xA0\xE5\x8F\xAF\xE4\xBB\xA5\xE4\xBD\xBF\xE7\x94\xA8\xE5\xA6\x82\xE4\xB8\x8B\xE4\xBE\x8B\xE7\xA8\x8B\xE9\x81\x8D\xE5\x8E\x86\xE6\x89\x80\xE6\x9C\x89\xE6\xB3\xA8\xE5\x86\x8C\xE7\x9A\x84\xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x9A
 152
 153static int callback(struct device *dev, void *p)
 154{
 155        struct v4l2_device *v4l2_dev = dev_get_drvdata(dev);
 156
 157        /* \xE6\xB5\x8B\xE8\xAF\x95\xE8\xBF\x99\xE4\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE6\x98\xAF\xE5\x90\xA6\xE5\xB7\xB2\xE7\xBB\x8F\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96 */
 158        if (v4l2_dev == NULL)
 159                return 0;
 160        ...
 161        return 0;
 162}
 163
 164int iterate(void *p)
 165{
 166        struct device_driver *drv;
 167        int err;
 168
 169        /* \xE5\x9C\xA8PCI \xE6\x80\xBB\xE7\xBA\xBF\xE4\xB8\x8A\xE6\x9F\xA5\xE6\x89\xBEivtv\xE9\xA9\xB1\xE5\x8A\xA8\xE3\x80\x82
 170           pci_bus_type\xE6\x98\xAF\xE5\x85\xA8\xE5\xB1\x80\xE7\x9A\x84. \xE5\xAF\xB9\xE4\xBA\x8EUSB\xE6\x80\xBB\xE7\xBA\xBF\xE4\xBD\xBF\xE7\x94\xA8usb_bus_type\xE3\x80\x82 */
 171        drv = driver_find("ivtv", &pci_bus_type);
 172        /* \xE9\x81\x8D\xE5\x8E\x86\xE6\x89\x80\xE6\x9C\x89\xE7\x9A\x84ivtv\xE8\xAE\xBE\xE5\xA4\x87\xE5\xAE\x9E\xE4\xBE\x8B */
 173        err = driver_for_each_device(drv, NULL, p, callback);
 174        put_driver(drv);
 175        return err;
 176}
 177
 178\xE6\x9C\x89\xE6\x97\xB6\xE4\xBD\xA0\xE9\x9C\x80\xE8\xA6\x81\xE4\xB8\x80\xE4\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE5\xAE\x9E\xE4\xBE\x8B\xE7\x9A\x84\xE8\xBF\x90\xE8\xA1\x8C\xE8\xAE\xA1\xE6\x95\xB0\xE3\x80\x82\xE8\xBF\x99\xE4\xB8\xAA\xE9\x80\x9A\xE5\xB8\xB8\xE7\x94\xA8\xE4\xBA\x8E\xE6\x98\xA0\xE5\xB0\x84\xE4\xB8\x80\xE4\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE5\xAE\x9E\xE4\xBE\x8B\xE5\x88\xB0\xE4\xB8\x80\xE4\xB8\xAA
 179\xE6\xA8\xA1\xE5\x9D\x97\xE9\x80\x89\xE6\x8B\xA9\xE6\x95\xB0\xE7\xBB\x84\xE7\x9A\x84\xE7\xB4\xA2\xE5\xBC\x95\xE3\x80\x82
 180
 181\xE6\x8E\xA8\xE8\x8D\x90\xE6\x96\xB9\xE6\xB3\x95\xE5\xA6\x82\xE4\xB8\x8B\xEF\xBC\x9A
 182
 183static atomic_t drv_instance = ATOMIC_INIT(0);
 184
 185static int drv_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
 186{
 187        ...
 188        state->instance = atomic_inc_return(&drv_instance) - 1;
 189}
 190
 191\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE6\x9C\x89\xE5\xA4\x9A\xE4\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xEF\xBC\x8C\xE5\xAF\xB9\xE4\xBA\x8E\xE7\x83\xAD\xE6\x8F\x92\xE6\x8B\x94\xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x8C\xE7\x9F\xA5\xE9\x81\x93\xE4\xBD\x95\xE6\x97\xB6\xE6\xB3\xA8\xE9\x94\x80 v4l2_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93
 192\xE5\xB0\xB1\xE6\xAF\x94\xE8\xBE\x83\xE5\x9B\xB0\xE9\x9A\xBE\xE3\x80\x82\xE4\xB8\xBA\xE6\xAD\xA4 v4l2_device \xE6\x9C\x89\xE5\xBC\x95\xE7\x94\xA8\xE8\xAE\xA1\xE6\x95\xB0\xE6\x94\xAF\xE6\x8C\x81\xE3\x80\x82\xE5\xBD\x93\xE8\xB0\x83\xE7\x94\xA8 video_register_device
 193\xE6\x97\xB6\xE5\xA2\x9E\xE5\x8A\xA0\xE5\xBC\x95\xE7\x94\xA8\xE8\xAE\xA1\xE6\x95\xB0\xEF\xBC\x8C\xE8\x80\x8C\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE9\x87\x8A\xE6\x94\xBE\xE6\x97\xB6\xE5\x87\x8F\xE5\xB0\x8F\xE5\xBC\x95\xE7\x94\xA8\xE8\xAE\xA1\xE6\x95\xB0\xE3\x80\x82\xE5\xBD\x93\xE5\xBC\x95\xE7\x94\xA8\xE8\xAE\xA1\xE6\x95\xB0\xE4\xB8\xBA\xE9\x9B\xB6\xEF\xBC\x8C\xE5\x88\x99
 194v4l2_device \xE7\x9A\x84release() \xE5\x9B\x9E\xE8\xB0\x83\xE5\xB0\x86\xE8\xA2\xAB\xE6\x89\xA7\xE8\xA1\x8C\xE3\x80\x82\xE4\xBD\xA0\xE5\xB0\xB1\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x9C\xA8\xE6\xAD\xA4\xE6\x97\xB6\xE5\x81\x9A\xE6\x9C\x80\xE5\x90\x8E\xE7\x9A\x84\xE6\xB8\x85\xE7\x90\x86\xE5\xB7\xA5\xE4\xBD\x9C\xE3\x80\x82
 195
 196\xE5\xA6\x82\xE6\x9E\x9C\xE5\x88\x9B\xE5\xBB\xBA\xE4\xBA\x86\xE5\x85\xB6\xE4\xBB\x96\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xEF\xBC\x88\xE6\xAF\x94\xE5\xA6\x82 ALSA\xEF\xBC\x89\xEF\xBC\x8C\xE5\x88\x99\xE4\xBD\xA0\xE5\x8F\xAF\xE4\xBB\xA5\xE9\x80\x9A\xE8\xBF\x87\xE4\xBB\xA5\xE4\xB8\x8B\xE5\x87\xBD\xE6\x95\xB0\xE6\x89\x8B\xE5\x8A\xA8\xE5\xA2\x9E\xE5\x87\x8F
 197\xE5\xBC\x95\xE7\x94\xA8\xE8\xAE\xA1\xE6\x95\xB0\xEF\xBC\x9A
 198
 199void v4l2_device_get(struct v4l2_device *v4l2_dev);
 200
 201\xE6\x88\x96:
 202
 203int v4l2_device_put(struct v4l2_device *v4l2_dev);
 204
 205\xE7\x94\xB1\xE4\xBA\x8E\xE5\xBC\x95\xE7\x94\xA8\xE6\x8A\x80\xE6\x9C\xAF\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96\xE4\xB8\xBA 1 \xEF\xBC\x8C\xE4\xBD\xA0\xE4\xB9\x9F\xE9\x9C\x80\xE8\xA6\x81\xE5\x9C\xA8 disconnect() \xE5\x9B\x9E\xE8\xB0\x83\xEF\xBC\x88\xE5\xAF\xB9\xE4\xBA\x8E USB \xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x89\xE4\xB8\xAD
 206\xE8\xB0\x83\xE7\x94\xA8 v4l2_device_put\xEF\xBC\x8C\xE6\x88\x96\xE8\x80\x85 remove() \xE5\x9B\x9E\xE8\xB0\x83\xEF\xBC\x88\xE4\xBE\x8B\xE5\xA6\x82\xE5\xAF\xB9\xE4\xBA\x8E PCI \xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x89\xEF\xBC\x8C\xE5\x90\xA6\xE5\x88\x99
 207\xE5\xBC\x95\xE7\x94\xA8\xE8\xAE\xA1\xE6\x95\xB0\xE5\xB0\x86\xE6\xB0\xB8\xE8\xBF\x9C\xE4\xB8\x8D\xE4\xBC\x9A\xE4\xB8\xBA 0 \xE3\x80\x82
 208
 209v4l2_subdev\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93
 210------------------
 211
 212\xE8\xAE\xB8\xE5\xA4\x9A\xE9\xA9\xB1\xE5\x8A\xA8\xE9\x9C\x80\xE8\xA6\x81\xE4\xB8\x8E\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\x80\x9A\xE4\xBF\xA1\xE3\x80\x82\xE8\xBF\x99\xE4\xBA\x9B\xE8\xAE\xBE\xE5\xA4\x87\xE5\x8F\xAF\xE4\xBB\xA5\xE5\xAE\x8C\xE6\x88\x90\xE5\x90\x84\xE7\xA7\x8D\xE4\xBB\xBB\xE5\x8A\xA1\xEF\xBC\x8C\xE4\xBD\x86\xE9\x80\x9A\xE5\xB8\xB8\xE4\xBB\x96\xE4\xBB\xAC\xE8\xB4\x9F\xE8\xB4\xA3
 213\xE9\x9F\xB3\xE8\xA7\x86\xE9\xA2\x91\xE5\xA4\x8D\xE7\x94\xA8\xE5\x92\x8C\xE7\xBC\x96\xE8\xA7\xA3\xE7\xA0\x81\xE3\x80\x82\xE5\xA6\x82\xE7\xBD\x91\xE7\xBB\x9C\xE6\x91\x84\xE5\x83\x8F\xE5\xA4\xB4\xE7\x9A\x84\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\x80\x9A\xE5\xB8\xB8\xE6\x98\xAF\xE4\xBC\xA0\xE6\x84\x9F\xE5\x99\xA8\xE5\x92\x8C\xE6\x91\x84\xE5\x83\x8F\xE5\xA4\xB4\xE6\x8E\xA7\xE5\x88\xB6\xE5\x99\xA8\xE3\x80\x82
 214
 215\xE8\xBF\x99\xE4\xBA\x9B\xE4\xB8\x80\xE8\x88\xAC\xE4\xB8\xBA I2C \xE6\x8E\xA5\xE5\x8F\xA3\xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x8C\xE4\xBD\x86\xE5\xB9\xB6\xE4\xB8\x8D\xE4\xB8\x80\xE5\xAE\x9A\xE9\x83\xBD\xE6\x98\xAF\xE3\x80\x82\xE4\xB8\xBA\xE4\xBA\x86\xE7\xBB\x99\xE9\xA9\xB1\xE5\x8A\xA8\xE6\x8F\x90\xE4\xBE\x9B\xE8\xB0\x83\xE7\x94\xA8\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84
 216\xE7\xBB\x9F\xE4\xB8\x80\xE6\x8E\xA5\xE5\x8F\xA3\xEF\xBC\x8Cv4l2_subdev \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xEF\xBC\x88v4l2-subdev.h\xEF\xBC\x89\xE4\xBA\xA7\xE7\x94\x9F\xE4\xBA\x86\xE3\x80\x82
 217
 218\xE6\xAF\x8F\xE4\xB8\xAA\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\xA9\xB1\xE5\x8A\xA8\xE9\x83\xBD\xE5\xBF\x85\xE9\xA1\xBB\xE6\x9C\x89\xE4\xB8\x80\xE4\xB8\xAA v4l2_subdev \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE3\x80\x82\xE8\xBF\x99\xE4\xB8\xAA\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x8D\x95\xE7\x8B\xAC
 219\xE4\xBB\xA3\xE8\xA1\xA8\xE4\xB8\x80\xE4\xB8\xAA\xE7\xAE\x80\xE5\x8D\x95\xE7\x9A\x84\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x8C\xE4\xB9\x9F\xE5\x8F\xAF\xE4\xBB\xA5\xE5\xB5\x8C\xE5\x85\xA5\xE5\x88\xB0\xE4\xB8\x80\xE4\xB8\xAA\xE6\x9B\xB4\xE5\xA4\xA7\xE7\x9A\x84\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xEF\xBC\x8C\xE4\xB8\x8E\xE6\x9B\xB4\xE5\xA4\x9A\xE8\xAE\xBE\xE5\xA4\x87\xE7\x8A\xB6\xE6\x80\x81
 220\xE4\xBF\xA1\xE6\x81\xAF\xE4\xBF\x9D\xE5\xAD\x98\xE5\x9C\xA8\xE4\xB8\x80\xE8\xB5\xB7\xE3\x80\x82\xE9\x80\x9A\xE5\xB8\xB8\xE6\x9C\x89\xE4\xB8\x80\xE4\xB8\xAA\xE4\xB8\x8B\xE7\xBA\xA7\xE8\xAE\xBE\xE5\xA4\x87\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xEF\xBC\x88\xE6\xAF\x94\xE5\xA6\x82\xEF\xBC\x9Ai2c_client\xEF\xBC\x89\xE5\x8C\x85\xE5\x90\xAB\xE4\xBA\x86
 221\xE5\x86\x85\xE6\xA0\xB8\xE5\x88\x9B\xE5\xBB\xBA\xE7\x9A\x84\xE8\xAE\xBE\xE5\xA4\x87\xE6\x95\xB0\xE6\x8D\xAE\xE3\x80\x82\xE5\xBB\xBA\xE8\xAE\xAE\xE4\xBD\xBF\xE7\x94\xA8 v4l2_set_subdevdata() \xE5\xB0\x86\xE8\xBF\x99\xE4\xB8\xAA\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE7\x9A\x84
 222\xE6\x8C\x87\xE9\x92\x88\xE4\xBF\x9D\xE5\xAD\x98\xE5\x9C\xA8 v4l2_subdev \xE7\x9A\x84\xE7\xA7\x81\xE6\x9C\x89\xE6\x95\xB0\xE6\x8D\xAE\xE5\x9F\x9F(dev_priv)\xE4\xB8\xAD\xE3\x80\x82\xE8\xBF\x99\xE4\xBD\xBF\xE5\xBE\x97\xE9\x80\x9A\xE8\xBF\x87 v4l2_subdev
 223\xE6\x89\xBE\xE5\x88\xB0\xE5\xAE\x9E\xE9\x99\x85\xE7\x9A\x84\xE4\xBD\x8E\xE5\xB1\x82\xE6\x80\xBB\xE7\xBA\xBF\xE7\x89\xB9\xE5\xAE\x9A\xE8\xAE\xBE\xE5\xA4\x87\xE6\x95\xB0\xE6\x8D\xAE\xE5\x8F\x98\xE5\xBE\x97\xE5\xAE\xB9\xE6\x98\x93\xE3\x80\x82
 224
 225\xE4\xBD\xA0\xE5\x90\x8C\xE6\x97\xB6\xE9\x9C\x80\xE8\xA6\x81\xE4\xB8\x80\xE4\xB8\xAA\xE4\xBB\x8E\xE4\xBD\x8E\xE5\xB1\x82\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE8\x8E\xB7\xE5\x8F\x96 v4l2_subdev \xE6\x8C\x87\xE9\x92\x88\xE7\x9A\x84\xE6\x96\xB9\xE6\xB3\x95\xE3\x80\x82\xE5\xAF\xB9\xE4\xBA\x8E\xE5\xB8\xB8\xE7\x94\xA8\xE7\x9A\x84
 226i2c_client \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xEF\xBC\x8Ci2c_set_clientdata() \xE5\x87\xBD\xE6\x95\xB0\xE5\x8F\xAF\xE7\x94\xA8\xE4\xBA\x8E\xE4\xBF\x9D\xE5\xAD\x98\xE4\xB8\x80\xE4\xB8\xAA v4l2_subdev
 227\xE6\x8C\x87\xE9\x92\x88\xEF\xBC\x9B\xE5\xAF\xB9\xE4\xBA\x8E\xE5\x85\xB6\xE4\xBB\x96\xE6\x80\xBB\xE7\xBA\xBF\xE4\xBD\xA0\xE5\x8F\xAF\xE8\x83\xBD\xE9\x9C\x80\xE8\xA6\x81\xE4\xBD\xBF\xE7\x94\xA8\xE5\x85\xB6\xE4\xBB\x96\xE7\x9B\xB8\xE5\x85\xB3\xE5\x87\xBD\xE6\x95\xB0\xE3\x80\x82
 228
 229\xE6\xA1\xA5\xE9\xA9\xB1\xE5\x8A\xA8\xE4\xB8\xAD\xE4\xB9\x9F\xE5\xBA\x94\xE4\xBF\x9D\xE5\xAD\x98\xE6\xAF\x8F\xE4\xB8\xAA\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84\xE7\xA7\x81\xE6\x9C\x89\xE6\x95\xB0\xE6\x8D\xAE\xEF\xBC\x8C\xE6\xAF\x94\xE5\xA6\x82\xE4\xB8\x80\xE4\xB8\xAA\xE6\x8C\x87\xE5\x90\x91\xE7\x89\xB9\xE5\xAE\x9A\xE6\xA1\xA5\xE7\x9A\x84\xE5\x90\x84\xE8\xAE\xBE\xE5\xA4\x87\xE7\xA7\x81\xE6\x9C\x89
 230\xE6\x95\xB0\xE6\x8D\xAE\xE7\x9A\x84\xE6\x8C\x87\xE9\x92\x88\xE3\x80\x82\xE4\xB8\xBA\xE6\xAD\xA4 v4l2_subdev \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE6\x8F\x90\xE4\xBE\x9B\xE4\xB8\xBB\xE6\x9C\xBA\xE7\xA7\x81\xE6\x9C\x89\xE6\x95\xB0\xE6\x8D\xAE\xE5\x9F\x9F(host_priv)\xEF\xBC\x8C
 231\xE5\xB9\xB6\xE5\x8F\xAF\xE9\x80\x9A\xE8\xBF\x87 v4l2_get_subdev_hostdata() \xE5\x92\x8C v4l2_set_subdev_hostdata()
 232\xE8\xAE\xBF\xE9\x97\xAE\xE3\x80\x82
 233
 234\xE4\xBB\x8E\xE6\x80\xBB\xE7\xBA\xBF\xE6\xA1\xA5\xE9\xA9\xB1\xE5\x8A\xA8\xE7\x9A\x84\xE8\xA7\x86\xE8\xA7\x92\xEF\xBC\x8C\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x8A\xA0\xE8\xBD\xBD\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE6\xA8\xA1\xE5\x9D\x97\xE5\xB9\xB6\xE4\xBB\xA5\xE6\x9F\x90\xE7\xA7\x8D\xE6\x96\xB9\xE5\xBC\x8F\xE8\x8E\xB7\xE5\xBE\x97 v4l2_subdev
 235\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE6\x8C\x87\xE9\x92\x88\xE3\x80\x82\xE5\xAF\xB9\xE4\xBA\x8E i2c \xE6\x80\xBB\xE7\xBA\xBF\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9B\xB8\xE5\xAF\xB9\xE7\xAE\x80\xE5\x8D\x95\xEF\xBC\x9A\xE8\xB0\x83\xE7\x94\xA8 i2c_get_clientdata()\xE3\x80\x82
 236\xE5\xAF\xB9\xE4\xBA\x8E\xE5\x85\xB6\xE4\xBB\x96\xE6\x80\xBB\xE7\xBA\xBF\xE4\xB9\x9F\xE9\x9C\x80\xE8\xA6\x81\xE5\x81\x9A\xE7\xB1\xBB\xE4\xBC\xBC\xE7\x9A\x84\xE6\x93\x8D\xE4\xBD\x9C\xE3\x80\x82\xE9\x92\x88\xE5\xAF\xB9 I2C \xE6\x80\xBB\xE7\xBA\xBF\xE4\xB8\x8A\xE7\x9A\x84\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE8\xBE\x85\xE5\x8A\xA9\xE5\x87\xBD\xE6\x95\xB0\xE5\xB8\xAE\xE4\xBD\xA0
 237\xE5\xAE\x8C\xE6\x88\x90\xE4\xBA\x86\xE5\xA4\xA7\xE9\x83\xA8\xE5\x88\x86\xE5\xA4\x8D\xE6\x9D\x82\xE7\x9A\x84\xE5\xB7\xA5\xE4\xBD\x9C\xE3\x80\x82
 238
 239\xE6\xAF\x8F\xE4\xB8\xAA v4l2_subdev \xE9\x83\xBD\xE5\x8C\x85\xE5\x90\xAB\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\xA9\xB1\xE5\x8A\xA8\xE9\x9C\x80\xE8\xA6\x81\xE5\xAE\x9E\xE7\x8E\xB0\xE7\x9A\x84\xE5\x87\xBD\xE6\x95\xB0\xE6\x8C\x87\xE9\x92\x88\xEF\xBC\x88\xE5\xA6\x82\xE6\x9E\x9C\xE5\xAF\xB9\xE6\xAD\xA4\xE8\xAE\xBE\xE5\xA4\x87
 240\xE4\xB8\x8D\xE9\x80\x82\xE7\x94\xA8\xEF\xBC\x8C\xE5\x8F\xAF\xE4\xB8\xBANULL\xEF\xBC\x89\xE3\x80\x82\xE7\x94\xB1\xE4\xBA\x8E\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE5\x8F\xAF\xE5\xAE\x8C\xE6\x88\x90\xE8\xAE\xB8\xE5\xA4\x9A\xE4\xB8\x8D\xE5\x90\x8C\xE7\x9A\x84\xE5\xB7\xA5\xE4\xBD\x9C\xEF\xBC\x8C\xE8\x80\x8C\xE5\x9C\xA8\xE4\xB8\x80\xE4\xB8\xAA\xE5\xBA\x9E\xE5\xA4\xA7\xE7\x9A\x84
 241\xE5\x87\xBD\xE6\x95\xB0\xE6\x8C\x87\xE9\x92\x88\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE9\x80\x9A\xE5\xB8\xB8\xE4\xBB\x85\xE6\x9C\x89\xE5\xB0\x91\xE6\x95\xB0\xE6\x9C\x89\xE7\x94\xA8\xE7\x9A\x84\xE5\x87\xBD\xE6\x95\xB0\xE5\xAE\x9E\xE7\x8E\xB0\xE5\x85\xB6\xE5\x8A\x9F\xE8\x83\xBD\xE8\x82\xAF\xE5\xAE\x9A\xE4\xB8\x8D\xE5\x90\x88\xE9\x80\x82\xE3\x80\x82\xE6\x89\x80\xE4\xBB\xA5\xEF\xBC\x8C
 242\xE5\x87\xBD\xE6\x95\xB0\xE6\x8C\x87\xE9\x92\x88\xE6\xA0\xB9\xE6\x8D\xAE\xE5\x85\xB6\xE5\xAE\x9E\xE7\x8E\xB0\xE7\x9A\x84\xE5\x8A\x9F\xE8\x83\xBD\xE8\xA2\xAB\xE5\x88\x86\xE7\xB1\xBB\xEF\xBC\x8C\xE6\xAF\x8F\xE4\xB8\x80\xE7\xB1\xBB\xE9\x83\xBD\xE6\x9C\x89\xE8\x87\xAA\xE5\xB7\xB1\xE7\x9A\x84\xE5\x87\xBD\xE6\x95\xB0\xE6\x8C\x87\xE9\x92\x88\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE3\x80\x82
 243
 244\xE9\xA1\xB6\xE5\xB1\x82\xE5\x87\xBD\xE6\x95\xB0\xE6\x8C\x87\xE9\x92\x88\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE5\x8C\x85\xE5\x90\xAB\xE4\xBA\x86\xE6\x8C\x87\xE5\x90\x91\xE5\x90\x84\xE7\xB1\xBB\xE5\x87\xBD\xE6\x95\xB0\xE6\x8C\x87\xE9\x92\x88\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE7\x9A\x84\xE6\x8C\x87\xE9\x92\x88\xEF\xBC\x8C\xE5\xA6\x82\xE6\x9E\x9C\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\xA9\xB1\xE5\x8A\xA8
 245\xE4\xB8\x8D\xE6\x94\xAF\xE6\x8C\x81\xE8\xAF\xA5\xE7\xB1\xBB\xE5\x87\xBD\xE6\x95\xB0\xE4\xB8\xAD\xE7\x9A\x84\xE4\xBB\xBB\xE4\xBD\x95\xE4\xB8\x80\xE4\xB8\xAA\xE5\x8A\x9F\xE8\x83\xBD\xEF\xBC\x8C\xE5\x88\x99\xE6\x8C\x87\xE5\x90\x91\xE8\xAF\xA5\xE7\xB1\xBB\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE7\x9A\x84\xE6\x8C\x87\xE9\x92\x88\xE4\xB8\xBANULL\xE3\x80\x82
 246
 247\xE8\xBF\x99\xE4\xBA\x9B\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE5\xAE\x9A\xE4\xB9\x89\xE5\xA6\x82\xE4\xB8\x8B\xEF\xBC\x9A
 248
 249struct v4l2_subdev_core_ops {
 250        int (*log_status)(struct v4l2_subdev *sd);
 251        int (*init)(struct v4l2_subdev *sd, u32 val);
 252        ...
 253};
 254
 255struct v4l2_subdev_tuner_ops {
 256        ...
 257};
 258
 259struct v4l2_subdev_audio_ops {
 260        ...
 261};
 262
 263struct v4l2_subdev_video_ops {
 264        ...
 265};
 266
 267struct v4l2_subdev_pad_ops {
 268        ...
 269};
 270
 271struct v4l2_subdev_ops {
 272        const struct v4l2_subdev_core_ops  *core;
 273        const struct v4l2_subdev_tuner_ops *tuner;
 274        const struct v4l2_subdev_audio_ops *audio;
 275        const struct v4l2_subdev_video_ops *video;
 276        const struct v4l2_subdev_pad_ops *video;
 277};
 278
 279\xE5\x85\xB6\xE4\xB8\xAD core\xEF\xBC\x88\xE6\xA0\xB8\xE5\xBF\x83\xEF\xBC\x89\xE5\x87\xBD\xE6\x95\xB0\xE9\x9B\x86\xE9\x80\x9A\xE5\xB8\xB8\xE5\x8F\xAF\xE7\x94\xA8\xE4\xBA\x8E\xE6\x89\x80\xE6\x9C\x89\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x8C\xE5\x85\xB6\xE4\xBB\x96\xE7\xB1\xBB\xE5\x88\xAB\xE7\x9A\x84\xE5\xAE\x9E\xE7\x8E\xB0\xE4\xBE\x9D\xE8\xB5\x96\xE4\xBA\x8E
 280\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE3\x80\x82\xE5\xA6\x82\xE8\xA7\x86\xE9\xA2\x91\xE8\xAE\xBE\xE5\xA4\x87\xE5\x8F\xAF\xE8\x83\xBD\xE4\xB8\x8D\xE6\x94\xAF\xE6\x8C\x81\xE9\x9F\xB3\xE9\xA2\x91\xE6\x93\x8D\xE4\xBD\x9C\xE5\x87\xBD\xE6\x95\xB0\xEF\xBC\x8C\xE5\x8F\x8D\xE4\xB9\x8B\xE4\xBA\xA6\xE7\x84\xB6\xE3\x80\x82
 281
 282\xE8\xBF\x99\xE6\xA0\xB7\xE7\x9A\x84\xE8\xAE\xBE\xE7\xBD\xAE\xE5\x9C\xA8\xE9\x99\x90\xE5\x88\xB6\xE4\xBA\x86\xE5\x87\xBD\xE6\x95\xB0\xE6\x8C\x87\xE9\x92\x88\xE6\x95\xB0\xE9\x87\x8F\xE7\x9A\x84\xE5\x90\x8C\xE6\x97\xB6\xEF\xBC\x8C\xE8\xBF\x98\xE4\xBD\xBF\xE5\xA2\x9E\xE5\x8A\xA0\xE6\x96\xB0\xE7\x9A\x84\xE6\x93\x8D\xE4\xBD\x9C\xE5\x87\xBD\xE6\x95\xB0\xE5\x92\x8C\xE5\x88\x86\xE7\xB1\xBB
 283\xE5\x8F\x98\xE5\xBE\x97\xE8\xBE\x83\xE4\xB8\xBA\xE5\xAE\xB9\xE6\x98\x93\xE3\x80\x82
 284
 285\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x8F\xAF\xE4\xBD\xBF\xE7\x94\xA8\xE5\xA6\x82\xE4\xB8\x8B\xE5\x87\xBD\xE6\x95\xB0\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96 v4l2_subdev \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xEF\xBC\x9A
 286
 287        v4l2_subdev_init(sd, &ops);
 288
 289\xE7\x84\xB6\xE5\x90\x8E\xEF\xBC\x8C\xE4\xBD\xA0\xE5\xBF\x85\xE9\xA1\xBB\xE7\x94\xA8\xE4\xB8\x80\xE4\xB8\xAA\xE5\x94\xAF\xE4\xB8\x80\xE7\x9A\x84\xE5\x90\x8D\xE5\xAD\x97\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96 subdev->name\xEF\xBC\x8C\xE5\xB9\xB6\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96\xE6\xA8\xA1\xE5\x9D\x97\xE7\x9A\x84
 290owner \xE5\x9F\x9F\xE3\x80\x82\xE8\x8B\xA5\xE4\xBD\xBF\xE7\x94\xA8 i2c \xE8\xBE\x85\xE5\x8A\xA9\xE5\x87\xBD\xE6\x95\xB0\xEF\xBC\x8C\xE8\xBF\x99\xE4\xBA\x9B\xE9\x83\xBD\xE4\xBC\x9A\xE5\xB8\xAE\xE4\xBD\xA0\xE5\xA4\x84\xE7\x90\x86\xE5\xA5\xBD\xE3\x80\x82
 291
 292\xE8\x8B\xA5\xE9\x9C\x80\xE5\x90\x8C\xE5\xAA\x92\xE4\xBD\x93\xE6\xA1\x86\xE6\x9E\xB6\xE6\x95\xB4\xE5\x90\x88\xEF\xBC\x8C\xE4\xBD\xA0\xE5\xBF\x85\xE9\xA1\xBB\xE8\xB0\x83\xE7\x94\xA8 media_entity_init() \xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96 v4l2_subdev
 293\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE7\x9A\x84 media_entity \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xEF\xBC\x88entity \xE5\x9F\x9F\xEF\xBC\x89\xEF\xBC\x9A
 294
 295        struct media_pad *pads = &my_sd->pads;
 296        int err;
 297
 298        err = media_entity_init(&sd->entity, npads, pads, 0);
 299
 300pads \xE6\x95\xB0\xE7\xBB\x84\xE5\xBF\x85\xE9\xA1\xBB\xE9\xA2\x84\xE5\x85\x88\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96\xE3\x80\x82\xE6\x97\xA0\xE9\xA1\xBB\xE6\x89\x8B\xE5\x8A\xA8\xE8\xAE\xBE\xE7\xBD\xAE media_entity \xE7\x9A\x84 type \xE5\x92\x8C
 301name \xE5\x9F\x9F\xEF\xBC\x8C\xE4\xBD\x86\xE5\xA6\x82\xE6\x9C\x89\xE5\xBF\x85\xE8\xA6\x81\xEF\xBC\x8Crevision \xE5\x9F\x9F\xE5\xBF\x85\xE9\xA1\xBB\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96\xE3\x80\x82
 302
 303\xE5\xBD\x93\xEF\xBC\x88\xE4\xBB\xBB\xE4\xBD\x95\xEF\xBC\x89\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE8\xA2\xAB\xE6\x89\x93\xE5\xBC\x80/\xE5\x85\xB3\xE9\x97\xAD\xEF\xBC\x8C\xE5\xAF\xB9 entity \xE7\x9A\x84\xE5\xBC\x95\xE7\x94\xA8\xE5\xB0\x86\xE8\xA2\xAB\xE8\x87\xAA\xE5\x8A\xA8\xE8\x8E\xB7\xE5\x8F\x96/\xE9\x87\x8A\xE6\x94\xBE\xE3\x80\x82
 304
 305\xE5\x9C\xA8\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE8\xA2\xAB\xE6\xB3\xA8\xE9\x94\x80\xE4\xB9\x8B\xE5\x90\x8E\xEF\xBC\x8C\xE4\xB8\x8D\xE8\xA6\x81\xE5\xBF\x98\xE8\xAE\xB0\xE6\xB8\x85\xE7\x90\x86 media_entity \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xEF\xBC\x9A
 306
 307        media_entity_cleanup(&sd->entity);
 308
 309\xE5\xA6\x82\xE6\x9E\x9C\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\xA9\xB1\xE5\x8A\xA8\xE8\xB6\x8B\xE5\x90\x91\xE4\xBA\x8E\xE5\xA4\x84\xE7\x90\x86\xE8\xA7\x86\xE9\xA2\x91\xE5\xB9\xB6\xE6\x95\xB4\xE5\x90\x88\xE8\xBF\x9B\xE4\xBA\x86\xE5\xAA\x92\xE4\xBD\x93\xE6\xA1\x86\xE6\x9E\xB6\xEF\xBC\x8C\xE5\xBF\x85\xE9\xA1\xBB\xE4\xBD\xBF\xE7\x94\xA8 v4l2_subdev_pad_ops
 310\xE6\x9B\xBF\xE4\xBB\xA3 v4l2_subdev_video_ops \xE5\xAE\x9E\xE7\x8E\xB0\xE6\xA0\xBC\xE5\xBC\x8F\xE7\x9B\xB8\xE5\x85\xB3\xE7\x9A\x84\xE5\x8A\x9F\xE8\x83\xBD\xE3\x80\x82
 311
 312\xE8\xBF\x99\xE7\xA7\x8D\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xEF\xBC\x8C\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\xA9\xB1\xE5\x8A\xA8\xE5\xBA\x94\xE8\xAF\xA5\xE8\xAE\xBE\xE7\xBD\xAE link_validate \xE5\x9F\x9F\xEF\xBC\x8C\xE4\xBB\xA5\xE6\x8F\x90\xE4\xBE\x9B\xE5\xAE\x83\xE8\x87\xAA\xE8\xBA\xAB\xE7\x9A\x84\xE9\x93\xBE\xE6\x8E\xA5
 313\xE9\xAA\x8C\xE8\xAF\x81\xE5\x87\xBD\xE6\x95\xB0\xE3\x80\x82\xE9\x93\xBE\xE6\x8E\xA5\xE9\xAA\x8C\xE8\xAF\x81\xE5\x87\xBD\xE6\x95\xB0\xE5\xBA\x94\xE5\xAF\xB9\xE7\xAE\xA1\xE9\x81\x93\xEF\xBC\x88\xE4\xB8\xA4\xE7\xAB\xAF\xE9\x93\xBE\xE6\x8E\xA5\xE7\x9A\x84\xE9\x83\xBD\xE6\x98\xAF V4L2 \xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x89\xE4\xB8\xAD\xE7\x9A\x84\xE6\xAF\x8F\xE4\xB8\xAA
 314\xE9\x93\xBE\xE6\x8E\xA5\xE8\xB0\x83\xE7\x94\xA8\xE3\x80\x82\xE9\xA9\xB1\xE5\x8A\xA8\xE8\xBF\x98\xE8\xA6\x81\xE8\xB4\x9F\xE8\xB4\xA3\xE9\xAA\x8C\xE8\xAF\x81\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE5\x92\x8C\xE8\xA7\x86\xE9\xA2\x91\xE8\x8A\x82\xE7\x82\xB9\xE9\x97\xB4\xE6\xA0\xBC\xE5\xBC\x8F\xE9\x85\x8D\xE7\xBD\xAE\xE7\x9A\x84\xE6\xAD\xA3\xE7\xA1\xAE\xE6\x80\xA7\xE3\x80\x82
 315
 316\xE5\xA6\x82\xE6\x9E\x9C link_validate \xE6\x93\x8D\xE4\xBD\x9C\xE6\xB2\xA1\xE6\x9C\x89\xE8\xAE\xBE\xE7\xBD\xAE\xEF\xBC\x8C\xE9\xBB\x98\xE8\xAE\xA4\xE7\x9A\x84 v4l2_subdev_link_validate_default()
 317\xE5\x87\xBD\xE6\x95\xB0\xE5\xB0\x86\xE4\xBC\x9A\xE8\xA2\xAB\xE8\xB0\x83\xE7\x94\xA8\xE3\x80\x82\xE8\xBF\x99\xE4\xB8\xAA\xE5\x87\xBD\xE6\x95\xB0\xE4\xBF\x9D\xE8\xAF\x81\xE5\xAE\xBD\xE3\x80\x81\xE9\xAB\x98\xE5\x92\x8C\xE5\xAA\x92\xE4\xBD\x93\xE6\x80\xBB\xE7\xBA\xBF\xE5\x83\x8F\xE7\xB4\xA0\xE6\xA0\xBC\xE5\xBC\x8F\xE5\x9C\xA8\xE9\x93\xBE\xE6\x8E\xA5\xE7\x9A\x84\xE6\x94\xB6\xE5\x8F\x91\xE4\xB8\xA4\xE7\xAB\xAF
 318\xE9\x83\xBD\xE4\xB8\x80\xE8\x87\xB4\xE3\x80\x82\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\xA9\xB1\xE5\x8A\xA8\xE9\x99\xA4\xE4\xBA\x86\xE5\xAE\x83\xE4\xBB\xAC\xE8\x87\xAA\xE5\xB7\xB1\xE7\x9A\x84\xE6\xA3\x80\xE6\xB5\x8B\xE5\xA4\x96\xEF\xBC\x8C\xE4\xB9\x9F\xE5\x8F\xAF\xE4\xBB\xA5\xE8\x87\xAA\xE7\x94\xB1\xE4\xBD\xBF\xE7\x94\xA8\xE8\xBF\x99\xE4\xB8\xAA\xE5\x87\xBD\xE6\x95\xB0\xE4\xBB\xA5\xE6\x89\xA7\xE8\xA1\x8C
 319\xE4\xB8\x8A\xE9\x9D\xA2\xE6\x8F\x90\xE5\x88\xB0\xE7\x9A\x84\xE6\xA3\x80\xE6\x9F\xA5\xE3\x80\x82
 320
 321\xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x88\xE6\xA1\xA5\xEF\xBC\x89\xE9\xA9\xB1\xE5\x8A\xA8\xE7\xA8\x8B\xE5\xBA\x8F\xE5\xBF\x85\xE9\xA1\xBB\xE5\x90\x91 v4l2_device \xE6\xB3\xA8\xE5\x86\x8C v4l2_subdev\xEF\xBC\x9A
 322
 323        int err = v4l2_device_register_subdev(v4l2_dev, sd);
 324
 325\xE5\xA6\x82\xE6\x9E\x9C\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE6\xA8\xA1\xE5\x9D\x97\xE5\x9C\xA8\xE5\xAE\x83\xE6\xB3\xA8\xE5\x86\x8C\xE5\x89\x8D\xE6\xB6\x88\xE5\xA4\xB1\xEF\xBC\x8C\xE8\xBF\x99\xE4\xB8\xAA\xE6\x93\x8D\xE4\xBD\x9C\xE5\x8F\xAF\xE8\x83\xBD\xE5\xA4\xB1\xE8\xB4\xA5\xE3\x80\x82\xE5\x9C\xA8\xE8\xBF\x99\xE4\xB8\xAA\xE5\x87\xBD\xE6\x95\xB0\xE6\x88\x90\xE5\x8A\x9F\xE8\xBF\x94\xE5\x9B\x9E\xE5\x90\x8E\xEF\xBC\x8C
 326subdev->dev \xE5\x9F\x9F\xE5\xB0\xB1\xE6\x8C\x87\xE5\x90\x91\xE4\xBA\x86 v4l2_device\xE3\x80\x82
 327
 328\xE5\xA6\x82\xE6\x9E\x9C v4l2_device \xE7\x88\xB6\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84 mdev \xE5\x9F\x9F\xE4\xB8\xBA\xE9\x9D\x9E NULL \xE5\x80\xBC\xEF\xBC\x8C\xE5\x88\x99\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE5\xAE\x9E\xE4\xBD\x93\xE5\xB0\x86\xE8\xA2\xAB\xE8\x87\xAA\xE5\x8A\xA8
 329\xE6\xB3\xA8\xE5\x86\x8C\xE4\xB8\xBA\xE5\xAA\x92\xE4\xBD\x93\xE8\xAE\xBE\xE5\xA4\x87\xE3\x80\x82
 330
 331\xE6\xB3\xA8\xE9\x94\x80\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE5\x88\x99\xE5\x8F\xAF\xE7\x94\xA8\xE5\xA6\x82\xE4\xB8\x8B\xE5\x87\xBD\xE6\x95\xB0\xEF\xBC\x9A
 332
 333        v4l2_device_unregister_subdev(sd);
 334
 335\xE6\xAD\xA4\xE5\x90\x8E\xEF\xBC\x8C\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE6\xA8\xA1\xE5\x9D\x97\xE5\xB0\xB1\xE5\x8F\xAF\xE5\x8D\xB8\xE8\xBD\xBD\xEF\xBC\x8C\xE4\xB8\x94 sd->dev == NULL\xE3\x80\x82
 336
 337\xE6\xB3\xA8\xE5\x86\x8C\xE4\xB9\x8B\xE8\xAE\xBE\xE5\xA4\x87\xE5\x90\x8E\xEF\xBC\x8C\xE5\x8F\xAF\xE9\x80\x9A\xE8\xBF\x87\xE4\xBB\xA5\xE4\xB8\x8B\xE6\x96\xB9\xE5\xBC\x8F\xE7\x9B\xB4\xE6\x8E\xA5\xE8\xB0\x83\xE7\x94\xA8\xE5\x85\xB6\xE6\x93\x8D\xE4\xBD\x9C\xE5\x87\xBD\xE6\x95\xB0\xEF\xBC\x9A
 338
 339        err = sd->ops->core->g_std(sd, &norm);
 340
 341\xE4\xBD\x86\xE4\xBD\xBF\xE7\x94\xA8\xE5\xA6\x82\xE4\xB8\x8B\xE5\xAE\x8F\xE4\xBC\x9A\xE6\xAF\x94\xE8\xBE\x83\xE5\xAE\xB9\xE6\x98\x93\xE4\xB8\x94\xE5\x90\x88\xE9\x80\x82\xEF\xBC\x9A
 342
 343        err = v4l2_subdev_call(sd, core, g_std, &norm);
 344
 345\xE8\xBF\x99\xE4\xB8\xAA\xE5\xAE\x8F\xE5\xB0\x86\xE4\xBC\x9A\xE5\x81\x9A NULL \xE6\x8C\x87\xE9\x92\x88\xE6\xA3\x80\xE6\x9F\xA5\xEF\xBC\x8C\xE5\xA6\x82\xE6\x9E\x9C subdev \xE4\xB8\xBA NULL\xEF\xBC\x8C\xE5\x88\x99\xE8\xBF\x94\xE5\x9B\x9E-ENODEV\xEF\xBC\x9B\xE5\xA6\x82\xE6\x9E\x9C
 346subdev->core \xE6\x88\x96 subdev->core->g_std \xE4\xB8\xBA NULL\xEF\xBC\x8C\xE5\x88\x99\xE8\xBF\x94\xE5\x9B\x9E -ENOIOCTLCMD\xEF\xBC\x9B
 347\xE5\x90\xA6\xE5\x88\x99\xE5\xB0\x86\xE8\xBF\x94\xE5\x9B\x9E subdev->ops->core->g_std ops \xE8\xB0\x83\xE7\x94\xA8\xE7\x9A\x84\xE5\xAE\x9E\xE9\x99\x85\xE7\xBB\x93\xE6\x9E\x9C\xE3\x80\x82
 348
 349\xE6\x9C\x89\xE6\x97\xB6\xE4\xB9\x9F\xE5\x8F\xAF\xE8\x83\xBD\xE5\x90\x8C\xE6\x97\xB6\xE8\xB0\x83\xE7\x94\xA8\xE6\x89\x80\xE6\x9C\x89\xE6\x88\x96\xE4\xB8\x80\xE7\xB3\xBB\xE5\x88\x97\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84\xE6\x9F\x90\xE4\xB8\xAA\xE6\x93\x8D\xE4\xBD\x9C\xE5\x87\xBD\xE6\x95\xB0\xEF\xBC\x9A
 350
 351        v4l2_device_call_all(v4l2_dev, 0, core, g_std, &norm);
 352
 353\xE4\xBB\xBB\xE4\xBD\x95\xE4\xB8\x8D\xE6\x94\xAF\xE6\x8C\x81\xE6\xAD\xA4\xE6\x93\x8D\xE4\xBD\x9C\xE7\x9A\x84\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\x83\xBD\xE4\xBC\x9A\xE8\xA2\xAB\xE8\xB7\xB3\xE8\xBF\x87\xEF\xBC\x8C\xE5\xB9\xB6\xE5\xBF\xBD\xE7\x95\xA5\xE9\x94\x99\xE8\xAF\xAF\xE8\xBF\x94\xE5\x9B\x9E\xE5\x80\xBC\xE3\x80\x82\xE4\xBD\x86\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE9\x9C\x80\xE8\xA6\x81
 354\xE6\xA3\x80\xE6\x9F\xA5\xE5\x87\xBA\xE9\x94\x99\xE7\xA0\x81\xEF\xBC\x8C\xE5\x88\x99\xE5\x8F\xAF\xE4\xBD\xBF\xE7\x94\xA8\xE5\xA6\x82\xE4\xB8\x8B\xE5\x87\xBD\xE6\x95\xB0\xEF\xBC\x9A
 355
 356        err = v4l2_device_call_until_err(v4l2_dev, 0, core, g_std, &norm);
 357
 358\xE9\x99\xA4 -ENOIOCTLCMD \xE5\xA4\x96\xE7\x9A\x84\xE4\xBB\xBB\xE4\xBD\x95\xE9\x94\x99\xE8\xAF\xAF\xE9\x83\xBD\xE4\xBC\x9A\xE8\xB7\xB3\xE5\x87\xBA\xE5\xBE\xAA\xE7\x8E\xAF\xE5\xB9\xB6\xE8\xBF\x94\xE5\x9B\x9E\xE9\x94\x99\xE8\xAF\xAF\xE5\x80\xBC\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xEF\xBC\x88\xE9\x99\xA4 -ENOIOCTLCMD
 359\xE5\xA4\x96\xEF\xBC\x89\xE6\xB2\xA1\xE6\x9C\x89\xE9\x94\x99\xE8\xAF\xAF\xE5\x8F\x91\xE7\x94\x9F\xEF\xBC\x8C\xE5\x88\x99\xE8\xBF\x94\xE5\x9B\x9E 0\xE3\x80\x82
 360
 361\xE5\xAF\xB9\xE4\xBA\x8E\xE4\xBB\xA5\xE4\xB8\x8A\xE4\xB8\xA4\xE4\xB8\xAA\xE5\x87\xBD\xE6\x95\xB0\xE7\x9A\x84\xE7\xAC\xAC\xE4\xBA\x8C\xE4\xB8\xAA\xE5\x8F\x82\xE6\x95\xB0\xE4\xB8\xBA\xE7\xBB\x84 ID\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE4\xB8\xBA 0\xEF\xBC\x8C\xE5\x88\x99\xE6\x89\x80\xE6\x9C\x89\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\x83\xBD\xE4\xBC\x9A\xE6\x89\xA7\xE8\xA1\x8C
 362\xE8\xBF\x99\xE4\xB8\xAA\xE6\x93\x8D\xE4\xBD\x9C\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE4\xB8\xBA\xE9\x9D\x9E 0 \xE5\x80\xBC\xEF\xBC\x8C\xE5\x88\x99\xE5\x8F\xAA\xE6\x9C\x89\xE9\x82\xA3\xE4\xBA\x9B\xE7\xBB\x84 ID \xE5\x8C\xB9\xE9\x85\x8D\xE7\x9A\x84\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE6\x89\x8D\xE4\xBC\x9A\xE6\x89\xA7\xE8\xA1\x8C\xE6\xAD\xA4\xE6\x93\x8D\xE4\xBD\x9C\xE3\x80\x82
 363\xE5\x9C\xA8\xE6\xA1\xA5\xE9\xA9\xB1\xE5\x8A\xA8\xE6\xB3\xA8\xE5\x86\x8C\xE4\xB8\x80\xE4\xB8\xAA\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE5\x89\x8D\xEF\xBC\x8C\xE5\x8F\xAF\xE4\xBB\xA5\xE8\xAE\xBE\xE7\xBD\xAE sd->grp_id \xE4\xB8\xBA\xE4\xBB\xBB\xE4\xBD\x95\xE6\x9C\x9F\xE6\x9C\x9B\xE5\x80\xBC\xEF\xBC\x88\xE9\xBB\x98\xE8\xAE\xA4\xE5\x80\xBC\xE4\xB8\xBA
 3640\xEF\xBC\x89\xE3\x80\x82\xE8\xBF\x99\xE4\xB8\xAA\xE5\x80\xBC\xE5\xB1\x9E\xE4\xBA\x8E\xE6\xA1\xA5\xE9\xA9\xB1\xE5\x8A\xA8\xEF\xBC\x8C\xE4\xB8\x94\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\xA9\xB1\xE5\x8A\xA8\xE5\xB0\x86\xE4\xB8\x8D\xE4\xBC\x9A\xE4\xBF\xAE\xE6\x94\xB9\xE5\x92\x8C\xE4\xBD\xBF\xE7\x94\xA8\xE5\xAE\x83\xE3\x80\x82
 365
 366\xE7\xBB\x84 ID \xE8\xB5\x8B\xE4\xBA\x88\xE4\xBA\x86\xE6\xA1\xA5\xE9\xA9\xB1\xE5\x8A\xA8\xE6\x9B\xB4\xE5\xA4\x9A\xE5\xAF\xB9\xE4\xBA\x8E\xE5\xA6\x82\xE4\xBD\x95\xE8\xB0\x83\xE7\x94\xA8\xE5\x9B\x9E\xE8\xB0\x83\xE7\x9A\x84\xE6\x8E\xA7\xE5\x88\xB6\xE3\x80\x82\xE4\xBE\x8B\xE5\xA6\x82\xEF\xBC\x8C\xE7\x94\xB5\xE8\xB7\xAF\xE6\x9D\xBF\xE4\xB8\x8A\xE6\x9C\x89\xE5\xA4\x9A\xE4\xB8\xAA
 367\xE9\x9F\xB3\xE9\xA2\x91\xE8\x8A\xAF\xE7\x89\x87\xEF\xBC\x8C\xE6\xAF\x8F\xE4\xB8\xAA\xE9\x83\xBD\xE6\x9C\x89\xE6\x94\xB9\xE5\x8F\x98\xE9\x9F\xB3\xE9\x87\x8F\xE7\x9A\x84\xE8\x83\xBD\xE5\x8A\x9B\xE3\x80\x82\xE4\xBD\x86\xE5\xBD\x93\xE7\x94\xA8\xE6\x88\xB7\xE6\x83\xB3\xE8\xA6\x81\xE6\x94\xB9\xE5\x8F\x98\xE9\x9F\xB3\xE9\x87\x8F\xE7\x9A\x84\xE6\x97\xB6\xE5\x80\x99\xEF\xBC\x8C\xE9\x80\x9A\xE5\xB8\xB8
 368\xE5\x8F\xAA\xE6\x9C\x89\xE4\xB8\x80\xE4\xB8\xAA\xE4\xBC\x9A\xE8\xA2\xAB\xE5\xAE\x9E\xE9\x99\x85\xE4\xBD\xBF\xE7\x94\xA8\xE3\x80\x82\xE4\xBD\xA0\xE5\x8F\xAF\xE4\xBB\xA5\xE5\xAF\xB9\xE8\xBF\x99\xE6\xA0\xB7\xE7\x9A\x84\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE8\xAE\xBE\xE7\xBD\xAE\xE7\xBB\x84 ID \xE4\xB8\xBA\xEF\xBC\x88\xE4\xBE\x8B\xE5\xA6\x82 AUDIO_CONTROLLER\xEF\xBC\x89
 369\xE5\xB9\xB6\xE5\x9C\xA8\xE8\xB0\x83\xE7\x94\xA8 v4l2_device_call_all() \xE6\x97\xB6\xE6\x8C\x87\xE5\xAE\x9A\xE5\xAE\x83\xE4\xB8\xBA\xE7\xBB\x84 ID \xE5\x80\xBC\xE3\x80\x82\xE8\xBF\x99\xE5\xB0\xB1\xE4\xBF\x9D\xE8\xAF\x81\xE4\xBA\x86\xE5\x8F\xAA\xE6\x9C\x89
 370\xE9\x9C\x80\xE8\xA6\x81\xE7\x9A\x84\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE6\x89\x8D\xE4\xBC\x9A\xE6\x89\xA7\xE8\xA1\x8C\xE8\xBF\x99\xE4\xB8\xAA\xE5\x9B\x9E\xE8\xB0\x83\xE3\x80\x82
 371
 372\xE5\xA6\x82\xE6\x9E\x9C\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\x9C\x80\xE8\xA6\x81\xE9\x80\x9A\xE7\x9F\xA5\xE5\xAE\x83\xE7\x9A\x84 v4l2_device \xE7\x88\xB6\xE8\xAE\xBE\xE5\xA4\x87\xE4\xB8\x80\xE4\xB8\xAA\xE4\xBA\x8B\xE4\xBB\xB6\xEF\xBC\x8C\xE5\x8F\xAF\xE4\xBB\xA5\xE8\xB0\x83\xE7\x94\xA8
 373v4l2_subdev_notify(sd, notification, arg)\xE3\x80\x82\xE8\xBF\x99\xE4\xB8\xAA\xE5\xAE\x8F\xE6\xA3\x80\xE6\x9F\xA5\xE6\x98\xAF\xE5\x90\xA6\xE6\x9C\x89\xE4\xB8\x80\xE4\xB8\xAA
 374notify() \xE5\x9B\x9E\xE8\xB0\x83\xE8\xA2\xAB\xE6\xB3\xA8\xE5\x86\x8C\xEF\xBC\x8C\xE5\xA6\x82\xE6\x9E\x9C\xE6\xB2\xA1\xE6\x9C\x89\xEF\xBC\x8C\xE8\xBF\x94\xE5\x9B\x9E -ENODEV\xE3\x80\x82\xE5\x90\xA6\xE5\x88\x99\xE8\xBF\x94\xE5\x9B\x9E notify() \xE8\xB0\x83\xE7\x94\xA8
 375\xE7\xBB\x93\xE6\x9E\x9C\xE3\x80\x82
 376
 377\xE4\xBD\xBF\xE7\x94\xA8 v4l2_subdev \xE7\x9A\x84\xE5\xA5\xBD\xE5\xA4\x84\xE5\x9C\xA8\xE4\xBA\x8E\xE5\xAE\x83\xE6\x98\xAF\xE4\xB8\x80\xE4\xB8\xAA\xE9\x80\x9A\xE7\x94\xA8\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xEF\xBC\x8C\xE4\xB8\x94\xE4\xB8\x8D\xE5\x8C\x85\xE5\x90\xAB\xE4\xBB\xBB\xE4\xBD\x95\xE5\xBA\x95\xE5\xB1\x82\xE7\xA1\xAC\xE4\xBB\xB6
 378\xE4\xBF\xA1\xE6\x81\xAF\xE3\x80\x82\xE6\x89\x80\xE6\x9C\x89\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x8C\x85\xE5\x90\xAB\xE5\xA4\x9A\xE4\xB8\xAA I2C \xE6\x80\xBB\xE7\xBA\xBF\xE7\x9A\x84\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x8C\xE4\xBD\x86\xE4\xB9\x9F\xE6\x9C\x89\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE6\x98\xAF\xE9\x80\x9A\xE8\xBF\x87 GPIO
 379\xE6\x8E\xA7\xE5\x88\xB6\xE3\x80\x82\xE8\xBF\x99\xE4\xB8\xAA\xE5\x8C\xBA\xE5\x88\xAB\xE4\xBB\x85\xE5\x9C\xA8\xE9\x85\x8D\xE7\xBD\xAE\xE8\xAE\xBE\xE5\xA4\x87\xE6\x97\xB6\xE6\x9C\x89\xE5\x85\xB3\xE7\xB3\xBB\xEF\xBC\x8C\xE4\xB8\x80\xE6\x97\xA6\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE6\xB3\xA8\xE5\x86\x8C\xE5\xAE\x8C\xE6\x88\x90\xEF\xBC\x8C\xE5\xAF\xB9\xE4\xBA\x8E v4l2
 380\xE5\xAD\x90\xE7\xB3\xBB\xE7\xBB\x9F\xE6\x9D\xA5\xE8\xAF\xB4\xE5\xB0\xB1\xE5\xAE\x8C\xE5\x85\xA8\xE9\x80\x8F\xE6\x98\x8E\xE4\xBA\x86\xE3\x80\x82
 381
 382
 383V4L2 \xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4API
 384--------------------
 385
 386\xE9\x99\xA4\xE4\xBA\x86\xE9\x80\x9A\xE8\xBF\x87 v4l2_subdev_ops \xE7\xBB\x93\xE6\x9E\x84\xE5\xAF\xBC\xE5\x87\xBA\xE7\x9A\x84\xE5\x86\x85\xE6\xA0\xB8 API\xEF\xBC\x8CV4L2 \xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE4\xB9\x9F\xE5\x8F\xAF\xE4\xBB\xA5\xE7\x9B\xB4\xE6\x8E\xA5
 387\xE9\x80\x9A\xE8\xBF\x87\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE5\xBA\x94\xE7\x94\xA8\xE7\xA8\x8B\xE5\xBA\x8F\xE6\x9D\xA5\xE6\x8E\xA7\xE5\x88\xB6\xE3\x80\x82
 388
 389\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x9C\xA8 /dev \xE4\xB8\xAD\xE5\x88\x9B\xE5\xBB\xBA\xE5\x90\x8D\xE4\xB8\xBA v4l-subdevX \xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xEF\xBC\x8C\xE4\xBB\xA5\xE9\x80\x9A\xE8\xBF\x87\xE5\x85\xB6\xE7\x9B\xB4\xE6\x8E\xA5\xE8\xAE\xBF\xE9\x97\xAE\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE3\x80\x82
 390\xE5\xA6\x82\xE6\x9E\x9C\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE6\x94\xAF\xE6\x8C\x81\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE7\x9B\xB4\xE6\x8E\xA5\xE9\x85\x8D\xE7\xBD\xAE\xEF\xBC\x8C\xE5\xBF\x85\xE9\xA1\xBB\xE5\x9C\xA8\xE6\xB3\xA8\xE5\x86\x8C\xE5\x89\x8D\xE8\xAE\xBE\xE7\xBD\xAE V4L2_SUBDEV_FL_HAS_DEVNODE
 391\xE6\xA0\x87\xE5\xBF\x97\xE3\x80\x82
 392
 393\xE6\xB3\xA8\xE5\x86\x8C\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE4\xB9\x8B\xE5\x90\x8E\xEF\xBC\x8C v4l2_device \xE9\xA9\xB1\xE5\x8A\xA8\xE4\xBC\x9A\xE9\x80\x9A\xE8\xBF\x87\xE8\xB0\x83\xE7\x94\xA8 v4l2_device_register_subdev_nodes()
 394\xE5\x87\xBD\xE6\x95\xB0\xE4\xB8\xBA\xE6\x89\x80\xE6\x9C\x89\xE5\xB7\xB2\xE6\xB3\xA8\xE5\x86\x8C\xE5\xB9\xB6\xE8\xAE\xBE\xE7\xBD\xAE\xE4\xBA\x86 V4L2_SUBDEV_FL_HAS_DEVNODE \xE7\x9A\x84\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE5\x88\x9B\xE5\xBB\xBA
 395\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE3\x80\x82\xE8\xBF\x99\xE4\xBA\x9B\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE4\xBC\x9A\xE5\x9C\xA8\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE6\xB3\xA8\xE9\x94\x80\xE6\x97\xB6\xE8\x87\xAA\xE5\x8A\xA8\xE5\x88\xA0\xE9\x99\xA4\xE3\x80\x82
 396
 397\xE8\xBF\x99\xE4\xBA\x9B\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE5\xA4\x84\xE7\x90\x86 V4L2 API \xE7\x9A\x84\xE4\xB8\x80\xE4\xB8\xAA\xE5\xAD\x90\xE9\x9B\x86\xE3\x80\x82
 398
 399VIDIOC_QUERYCTRL
 400VIDIOC_QUERYMENU
 401VIDIOC_G_CTRL
 402VIDIOC_S_CTRL
 403VIDIOC_G_EXT_CTRLS
 404VIDIOC_S_EXT_CTRLS
 405VIDIOC_TRY_EXT_CTRLS
 406
 407        \xE8\xBF\x99\xE4\xBA\x9B ioctls \xE6\x8E\xA7\xE5\x88\xB6\xE4\xB8\x8E V4L2 \xE4\xB8\xAD\xE5\xAE\x9A\xE4\xB9\x89\xE7\x9A\x84\xE4\xB8\x80\xE8\x87\xB4\xE3\x80\x82\xE4\xBB\x96\xE4\xBB\xAC\xE8\xA1\x8C\xE4\xB8\xBA\xE7\x9B\xB8\xE5\x90\x8C\xEF\xBC\x8C\xE5\x94\xAF\xE4\xB8\x80\xE7\x9A\x84
 408        \xE4\xB8\x8D\xE5\x90\x8C\xE6\x98\xAF\xE4\xBB\x96\xE4\xBB\xAC\xE5\x8F\xAA\xE5\xA4\x84\xE7\x90\x86\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84\xE6\x8E\xA7\xE5\x88\xB6\xE5\xAE\x9E\xE7\x8E\xB0\xE3\x80\x82\xE6\xA0\xB9\xE6\x8D\xAE\xE9\xA9\xB1\xE5\x8A\xA8\xE7\xA8\x8B\xE5\xBA\x8F\xEF\xBC\x8C\xE8\xBF\x99\xE4\xBA\x9B\xE6\x8E\xA7\xE5\x88\xB6\xE4\xB9\x9F
 409        \xE5\x8F\xAF\xE4\xBB\xA5\xE9\x80\x9A\xE8\xBF\x87\xE4\xB8\x80\xE4\xB8\xAA\xEF\xBC\x88\xE6\x88\x96\xE5\xA4\x9A\xE4\xB8\xAA\xEF\xBC\x89 V4L2 \xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE8\xAE\xBF\xE9\x97\xAE\xE3\x80\x82
 410
 411VIDIOC_DQEVENT
 412VIDIOC_SUBSCRIBE_EVENT
 413VIDIOC_UNSUBSCRIBE_EVENT
 414
 415        \xE8\xBF\x99\xE4\xBA\x9B  ioctls \xE4\xBA\x8B\xE4\xBB\xB6\xE4\xB8\x8E V4L2 \xE4\xB8\xAD\xE5\xAE\x9A\xE4\xB9\x89\xE7\x9A\x84\xE4\xB8\x80\xE8\x87\xB4\xE3\x80\x82\xE4\xBB\x96\xE4\xBB\xAC\xE8\xA1\x8C\xE4\xB8\xBA\xE7\x9B\xB8\xE5\x90\x8C\xEF\xBC\x8C\xE5\x94\xAF\xE4\xB8\x80\xE7\x9A\x84
 416        \xE4\xB8\x8D\xE5\x90\x8C\xE6\x98\xAF\xE4\xBB\x96\xE4\xBB\xAC\xE5\x8F\xAA\xE5\xA4\x84\xE7\x90\x86\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE4\xBA\xA7\xE7\x94\x9F\xE7\x9A\x84\xE4\xBA\x8B\xE4\xBB\xB6\xE3\x80\x82\xE6\xA0\xB9\xE6\x8D\xAE\xE9\xA9\xB1\xE5\x8A\xA8\xE7\xA8\x8B\xE5\xBA\x8F\xEF\xBC\x8C\xE8\xBF\x99\xE4\xBA\x9B\xE4\xBA\x8B\xE4\xBB\xB6\xE4\xB9\x9F
 417        \xE5\x8F\xAF\xE4\xBB\xA5\xE9\x80\x9A\xE8\xBF\x87\xE4\xB8\x80\xE4\xB8\xAA\xEF\xBC\x88\xE6\x88\x96\xE5\xA4\x9A\xE4\xB8\xAA\xEF\xBC\x89 V4L2 \xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE4\xB8\x8A\xE6\x8A\xA5\xE3\x80\x82
 418
 419        \xE8\xA6\x81\xE4\xBD\xBF\xE7\x94\xA8\xE4\xBA\x8B\xE4\xBB\xB6\xE9\x80\x9A\xE7\x9F\xA5\xE7\x9A\x84\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\xA9\xB1\xE5\x8A\xA8\xEF\xBC\x8C\xE5\x9C\xA8\xE6\xB3\xA8\xE5\x86\x8C\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE5\x89\x8D\xE5\xBF\x85\xE9\xA1\xBB\xE5\x9C\xA8 v4l2_subdev::flags
 420        \xE4\xB8\xAD\xE8\xAE\xBE\xE7\xBD\xAE V4L2_SUBDEV_USES_EVENTS \xE5\xB9\xB6\xE5\x9C\xA8 v4l2_subdev::nevents
 421        \xE4\xB8\xAD\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96\xE4\xBA\x8B\xE4\xBB\xB6\xE9\x98\x9F\xE5\x88\x97\xE6\xB7\xB1\xE5\xBA\xA6\xE3\x80\x82\xE6\xB3\xA8\xE5\x86\x8C\xE5\xAE\x8C\xE6\x88\x90\xE5\x90\x8E\xEF\xBC\x8C\xE4\xBA\x8B\xE4\xBB\xB6\xE4\xBC\x9A\xE5\x9C\xA8 v4l2_subdev::devnode
 422        \xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE4\xB8\xAD\xE5\x83\x8F\xE9\x80\x9A\xE5\xB8\xB8\xE4\xB8\x80\xE6\xA0\xB7\xE8\xA2\xAB\xE6\x8E\x92\xE9\x98\x9F\xE3\x80\x82
 423
 424        \xE4\xB8\xBA\xE6\xAD\xA3\xE7\xA1\xAE\xE6\x94\xAF\xE6\x8C\x81\xE4\xBA\x8B\xE4\xBB\xB6\xE6\x9C\xBA\xE5\x88\xB6\xEF\xBC\x8Cpoll() \xE6\x96\x87\xE4\xBB\xB6\xE6\x93\x8D\xE4\xBD\x9C\xE4\xB9\x9F\xE5\xBA\x94\xE8\xA2\xAB\xE5\xAE\x9E\xE7\x8E\xB0\xE3\x80\x82
 425
 426\xE7\xA7\x81\xE6\x9C\x89 ioctls
 427
 428        \xE4\xB8\x8D\xE5\x9C\xA8\xE4\xBB\xA5\xE4\xB8\x8A\xE5\x88\x97\xE8\xA1\xA8\xE4\xB8\xAD\xE7\x9A\x84\xE6\x89\x80\xE6\x9C\x89 ioctls \xE4\xBC\x9A\xE9\x80\x9A\xE8\xBF\x87 core::ioctl \xE6\x93\x8D\xE4\xBD\x9C\xE7\x9B\xB4\xE6\x8E\xA5\xE4\xBC\xA0\xE9\x80\x92
 429        \xE7\xBB\x99\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\xA9\xB1\xE5\x8A\xA8\xE3\x80\x82
 430
 431
 432I2C \xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\xA9\xB1\xE5\x8A\xA8
 433-------------
 434
 435\xE7\x94\xB1\xE4\xBA\x8E\xE8\xBF\x99\xE4\xBA\x9B\xE9\xA9\xB1\xE5\x8A\xA8\xE5\xBE\x88\xE5\xB8\xB8\xE8\xA7\x81\xEF\xBC\x8C\xE6\x89\x80\xE4\xBB\xA5\xE5\x86\x85\xE7\x89\xB9\xE6\x8F\x90\xE4\xBE\x9B\xE4\xBA\x86\xE7\x89\xB9\xE5\xAE\x9A\xE7\x9A\x84\xE8\xBE\x85\xE5\x8A\xA9\xE5\x87\xBD\xE6\x95\xB0(v4l2-common.h)\xE8\xAE\xA9\xE8\xBF\x99\xE4\xBA\x9B
 436\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84\xE4\xBD\xBF\xE7\x94\xA8\xE6\x9B\xB4\xE5\x8A\xA0\xE5\xAE\xB9\xE6\x98\x93\xE3\x80\x82
 437
 438\xE6\xB7\xBB\xE5\x8A\xA0 v4l2_subdev \xE6\x94\xAF\xE6\x8C\x81\xE7\x9A\x84\xE6\x8E\xA8\xE8\x8D\x90\xE6\x96\xB9\xE6\xB3\x95\xE6\x98\xAF\xE8\xAE\xA9 I2C \xE9\xA9\xB1\xE5\x8A\xA8\xE5\xB0\x86 v4l2_subdev \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93
 439\xE5\xB5\x8C\xE5\x85\xA5\xE5\x88\xB0\xE4\xB8\xBA\xE6\xAF\x8F\xE4\xB8\xAA I2C \xE8\xAE\xBE\xE5\xA4\x87\xE5\xAE\x9E\xE4\xBE\x8B\xE5\x88\x9B\xE5\xBB\xBA\xE7\x9A\x84\xE7\x8A\xB6\xE6\x80\x81\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE3\x80\x82\xE8\x80\x8C\xE6\x9C\x80\xE7\xAE\x80\xE5\x8D\x95\xE7\x9A\x84\xE8\xAE\xBE\xE5\xA4\x87\xE6\xB2\xA1\xE6\x9C\x89\xE7\x8A\xB6\xE6\x80\x81
 440\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xEF\xBC\x8C\xE6\xAD\xA4\xE6\x97\xB6\xE5\x8F\xAF\xE4\xBB\xA5\xE7\x9B\xB4\xE6\x8E\xA5\xE5\x88\x9B\xE5\xBB\xBA\xE4\xB8\x80\xE4\xB8\xAA v4l2_subdev \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE3\x80\x82
 441
 442\xE4\xB8\x80\xE4\xB8\xAA\xE5\x85\xB8\xE5\x9E\x8B\xE7\x9A\x84\xE7\x8A\xB6\xE6\x80\x81\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE5\xA6\x82\xE4\xB8\x8B\xE6\x89\x80\xE7\xA4\xBA\xEF\xBC\x88\xE2\x80\x98chipname\xE2\x80\x99\xE7\x94\xA8\xE8\x8A\xAF\xE7\x89\x87\xE5\x90\x8D\xE4\xBB\xA3\xE6\x9B\xBF\xEF\xBC\x89\xEF\xBC\x9A
 443
 444struct chipname_state {
 445        struct v4l2_subdev sd;
 446        ...  /* \xE9\x99\x84\xE5\x8A\xA0\xE7\x9A\x84\xE7\x8A\xB6\xE6\x80\x81\xE5\x9F\x9F*/
 447};
 448
 449\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96 v4l2_subdev \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE7\x9A\x84\xE6\x96\xB9\xE6\xB3\x95\xE5\xA6\x82\xE4\xB8\x8B\xEF\xBC\x9A
 450
 451        v4l2_i2c_subdev_init(&state->sd, client, subdev_ops);
 452
 453\xE8\xBF\x99\xE4\xB8\xAA\xE5\x87\xBD\xE6\x95\xB0\xE5\xB0\x86\xE5\xA1\xAB\xE5\x85\x85 v4l2_subdev \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE7\x9A\x84\xE6\x89\x80\xE6\x9C\x89\xE5\x9F\x9F\xEF\xBC\x8C\xE5\xB9\xB6\xE4\xBF\x9D\xE8\xAF\x81 v4l2_subdev \xE5\x92\x8C
 454i2c_client \xE9\x83\xBD\xE6\x8C\x87\xE5\x90\x91\xE5\xBD\xBC\xE6\xAD\xA4\xE3\x80\x82
 455
 456\xE5\x90\x8C\xE6\x97\xB6\xEF\xBC\x8C\xE4\xBD\xA0\xE4\xB9\x9F\xE5\xBA\x94\xE8\xAF\xA5\xE4\xB8\xBA\xE4\xBB\x8E v4l2_subdev \xE6\x8C\x87\xE9\x92\x88\xE6\x89\xBE\xE5\x88\xB0 chipname_state \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE6\x8C\x87\xE9\x92\x88
 457\xE6\xB7\xBB\xE5\x8A\xA0\xE4\xB8\x80\xE4\xB8\xAA\xE8\xBE\x85\xE5\x8A\xA9\xE5\x86\x85\xE8\x81\x94\xE5\x87\xBD\xE6\x95\xB0\xE3\x80\x82
 458
 459static inline struct chipname_state *to_state(struct v4l2_subdev *sd)
 460{
 461        return container_of(sd, struct chipname_state, sd);
 462}
 463
 464\xE4\xBD\xBF\xE7\x94\xA8\xE4\xBB\xA5\xE4\xB8\x8B\xE5\x87\xBD\xE6\x95\xB0\xE5\x8F\xAF\xE4\xBB\xA5\xE9\x80\x9A\xE8\xBF\x87 v4l2_subdev \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE6\x8C\x87\xE9\x92\x88\xE8\x8E\xB7\xE5\xBE\x97 i2c_client \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93
 465\xE6\x8C\x87\xE9\x92\x88\xEF\xBC\x9A
 466
 467        struct i2c_client *client = v4l2_get_subdevdata(sd);
 468
 469\xE8\x80\x8C\xE4\xBB\xA5\xE4\xB8\x8B\xE5\x87\xBD\xE6\x95\xB0\xE5\x88\x99\xE7\x9B\xB8\xE5\x8F\x8D\xEF\xBC\x8C\xE9\x80\x9A\xE8\xBF\x87 i2c_client \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE6\x8C\x87\xE9\x92\x88\xE8\x8E\xB7\xE5\xBE\x97 v4l2_subdev \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93
 470\xE6\x8C\x87\xE9\x92\x88\xEF\xBC\x9A
 471
 472        struct v4l2_subdev *sd = i2c_get_clientdata(client);
 473
 474\xE5\xBD\x93 remove()\xE5\x87\xBD\xE6\x95\xB0\xE8\xA2\xAB\xE8\xB0\x83\xE7\x94\xA8\xE5\x89\x8D\xEF\xBC\x8C\xE5\xBF\x85\xE9\xA1\xBB\xE4\xBF\x9D\xE8\xAF\x81\xE5\x85\x88\xE8\xB0\x83\xE7\x94\xA8 v4l2_device_unregister_subdev(sd)\xE3\x80\x82
 475\xE6\xAD\xA4\xE6\x93\x8D\xE4\xBD\x9C\xE5\xB0\x86\xE4\xBC\x9A\xE4\xBB\x8E\xE6\xA1\xA5\xE9\xA9\xB1\xE5\x8A\xA8\xE4\xB8\xAD\xE6\xB3\xA8\xE9\x94\x80\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE3\x80\x82\xE5\x8D\xB3\xE4\xBD\xBF\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE6\xB2\xA1\xE6\x9C\x89\xE6\xB3\xA8\xE5\x86\x8C\xEF\xBC\x8C\xE8\xB0\x83\xE7\x94\xA8\xE6\xAD\xA4\xE5\x87\xBD\xE6\x95\xB0\xE4\xB9\x9F\xE6\x98\xAF
 476\xE5\xAE\x89\xE5\x85\xA8\xE7\x9A\x84\xE3\x80\x82
 477
 478\xE5\xBF\x85\xE9\xA1\xBB\xE8\xBF\x99\xE6\xA0\xB7\xE5\x81\x9A\xE7\x9A\x84\xE5\x8E\x9F\xE5\x9B\xA0\xE6\x98\xAF\xEF\xBC\x9A\xE5\xBD\x93\xE6\xA1\xA5\xE9\xA9\xB1\xE5\x8A\xA8\xE6\xB3\xA8\xE9\x94\x80 i2c \xE9\x80\x82\xE9\x85\x8D\xE5\x99\xA8\xE6\x97\xB6\xEF\xBC\x8Cremove()\xE5\x9B\x9E\xE8\xB0\x83\xE5\x87\xBD\xE6\x95\xB0
 479\xE4\xBC\x9A\xE8\xA2\xAB\xE9\x82\xA3\xE4\xB8\xAA\xE9\x80\x82\xE9\x85\x8D\xE5\x99\xA8\xE4\xB8\x8A\xE7\x9A\x84 i2c \xE8\xAE\xBE\xE5\xA4\x87\xE8\xB0\x83\xE7\x94\xA8\xE3\x80\x82\xE6\xAD\xA4\xE5\x90\x8E\xEF\xBC\x8C\xE7\x9B\xB8\xE5\xBA\x94\xE7\x9A\x84 v4l2_subdev \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93
 480\xE5\xB0\xB1\xE4\xB8\x8D\xE5\xAD\x98\xE5\x9C\xA8\xE4\xBA\x86\xEF\xBC\x8C\xE6\x89\x80\xE6\x9C\x89\xE5\xAE\x83\xE4\xBB\xAC\xE5\xBF\x85\xE9\xA1\xBB\xE5\x85\x88\xE8\xA2\xAB\xE6\xB3\xA8\xE9\x94\x80\xE3\x80\x82\xE5\x9C\xA8 remove()\xE5\x9B\x9E\xE8\xB0\x83\xE5\x87\xBD\xE6\x95\xB0\xE4\xB8\xAD\xE8\xB0\x83\xE7\x94\xA8
 481v4l2_device_unregister_subdev(sd)\xEF\xBC\x8C\xE5\x8F\xAF\xE4\xBB\xA5\xE4\xBF\x9D\xE8\xAF\x81\xE6\x89\xA7\xE8\xA1\x8C\xE6\x80\xBB\xE6\x98\xAF\xE6\xAD\xA3\xE7\xA1\xAE\xE7\x9A\x84\xE3\x80\x82
 482
 483
 484\xE6\xA1\xA5\xE9\xA9\xB1\xE5\x8A\xA8\xE4\xB9\x9F\xE6\x9C\x89\xE4\xB8\x80\xE4\xBA\x9B\xE8\xBE\x85\xE7\xBB\x84\xE5\x87\xBD\xE6\x95\xB0\xE5\x8F\xAF\xE7\x94\xA8\xEF\xBC\x9A
 485
 486struct v4l2_subdev *sd = v4l2_i2c_new_subdev(v4l2_dev, adapter,
 487               "module_foo", "chipid", 0x36, NULL);
 488
 489\xE8\xBF\x99\xE4\xB8\xAA\xE5\x87\xBD\xE6\x95\xB0\xE4\xBC\x9A\xE5\x8A\xA0\xE8\xBD\xBD\xE7\xBB\x99\xE5\xAE\x9A\xE7\x9A\x84\xE6\xA8\xA1\xE5\x9D\x97\xEF\xBC\x88\xE5\xA6\x82\xE6\x9E\x9C\xE6\xB2\xA1\xE6\x9C\x89\xE6\xA8\xA1\xE5\x9D\x97\xE9\x9C\x80\xE8\xA6\x81\xE5\x8A\xA0\xE8\xBD\xBD\xEF\xBC\x8C\xE5\x8F\xAF\xE4\xBB\xA5\xE4\xB8\xBA NULL\xEF\xBC\x89\xEF\xBC\x8C
 490\xE5\xB9\xB6\xE7\x94\xA8\xE7\xBB\x99\xE5\xAE\x9A\xE7\x9A\x84 i2c \xE9\x80\x82\xE9\x85\x8D\xE5\x99\xA8\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE6\x8C\x87\xE9\x92\x88\xEF\xBC\x88i2c_adapter\xEF\xBC\x89\xE5\x92\x8C \xE5\x99\xA8\xE4\xBB\xB6\xE5\x9C\xB0\xE5\x9D\x80\xEF\xBC\x88chip/address\xEF\xBC\x89
 491\xE4\xBD\x9C\xE4\xB8\xBA\xE5\x8F\x82\xE6\x95\xB0\xE8\xB0\x83\xE7\x94\xA8 i2c_new_device()\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE4\xB8\x80\xE5\x88\x87\xE9\xA1\xBA\xE5\x88\xA9\xEF\xBC\x8C\xE5\x88\x99\xE5\xB0\xB1\xE5\x9C\xA8 v4l2_device
 492\xE4\xB8\xAD\xE6\xB3\xA8\xE5\x86\x8C\xE4\xBA\x86\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE3\x80\x82
 493
 494\xE4\xBD\xA0\xE4\xB9\x9F\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x88\xA9\xE7\x94\xA8 v4l2_i2c_new_subdev()\xE7\x9A\x84\xE6\x9C\x80\xE5\x90\x8E\xE4\xB8\x80\xE4\xB8\xAA\xE5\x8F\x82\xE6\x95\xB0\xEF\xBC\x8C\xE4\xBC\xA0\xE9\x80\x92\xE4\xB8\x80\xE4\xB8\xAA\xE5\x8F\xAF\xE8\x83\xBD\xE7\x9A\x84
 495I2C \xE5\x9C\xB0\xE5\x9D\x80\xE6\x95\xB0\xE7\xBB\x84\xEF\xBC\x8C\xE8\xAE\xA9\xE5\x87\xBD\xE6\x95\xB0\xE8\x87\xAA\xE5\x8A\xA8\xE6\x8E\xA2\xE6\xB5\x8B\xE3\x80\x82\xE8\xBF\x99\xE4\xBA\x9B\xE6\x8E\xA2\xE6\xB5\x8B\xE5\x9C\xB0\xE5\x9D\x80\xE5\x8F\xAA\xE6\x9C\x89\xE5\x9C\xA8\xE5\x89\x8D\xE4\xB8\x80\xE4\xB8\xAA\xE5\x8F\x82\xE6\x95\xB0\xE4\xB8\xBA 0 \xE7\x9A\x84
 496\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xE4\xBD\xBF\xE7\x94\xA8\xE3\x80\x82\xE9\x9D\x9E\xE9\x9B\xB6\xE5\x8F\x82\xE6\x95\xB0\xE6\x84\x8F\xE5\x91\xB3\xE7\x9D\x80\xE4\xBD\xA0\xE7\x9F\xA5\xE9\x81\x93\xE5\x87\x86\xE7\xA1\xAE\xE7\x9A\x84 i2c \xE5\x9C\xB0\xE5\x9D\x80\xEF\xBC\x8C\xE6\x89\x80\xE4\xBB\xA5\xE6\xAD\xA4\xE6\x97\xB6\xE6\x97\xA0\xE9\xA1\xBB\xE8\xBF\x9B\xE8\xA1\x8C
 497\xE6\x8E\xA2\xE6\xB5\x8B\xE3\x80\x82
 498
 499\xE5\xA6\x82\xE6\x9E\x9C\xE5\x87\xBA\xE9\x94\x99\xEF\xBC\x8C\xE4\xB8\xA4\xE4\xB8\xAA\xE5\x87\xBD\xE6\x95\xB0\xE9\x83\xBD\xE8\xBF\x94\xE5\x9B\x9E NULL\xE3\x80\x82
 500
 501\xE6\xB3\xA8\xE6\x84\x8F\xEF\xBC\x9A\xE4\xBC\xA0\xE9\x80\x92\xE7\xBB\x99 v4l2_i2c_new_subdev()\xE7\x9A\x84 chipid \xE9\x80\x9A\xE5\xB8\xB8\xE4\xB8\x8E\xE6\xA8\xA1\xE5\x9D\x97\xE5\x90\x8D\xE4\xB8\x80\xE8\x87\xB4\xE3\x80\x82
 502\xE5\xAE\x83\xE5\x85\x81\xE8\xAE\xB8\xE4\xBD\xA0\xE6\x8C\x87\xE5\xAE\x9A\xE4\xB8\x80\xE4\xB8\xAA\xE8\x8A\xAF\xE7\x89\x87\xE7\x9A\x84\xE5\x8F\x98\xE4\xBD\x93\xEF\xBC\x8C\xE6\xAF\x94\xE5\xA6\x82\xE2\x80\x9Csaa7114\xE2\x80\x9D\xE6\x88\x96\xE2\x80\x9Csaa7115\xE2\x80\x9D\xE3\x80\x82\xE4\xB8\x80\xE8\x88\xAC\xE9\x80\x9A\xE8\xBF\x87
 503i2c \xE9\xA9\xB1\xE5\x8A\xA8\xE8\x87\xAA\xE5\x8A\xA8\xE6\x8E\xA2\xE6\xB5\x8B\xE3\x80\x82chipid \xE7\x9A\x84\xE4\xBD\xBF\xE7\x94\xA8\xE6\x98\xAF\xE5\x9C\xA8\xE4\xBB\x8A\xE5\x90\x8E\xE9\x9C\x80\xE8\xA6\x81\xE6\xB7\xB1\xE5\x85\xA5\xE4\xBA\x86\xE8\xA7\xA3\xE7\x9A\x84\xE4\xBA\x8B\xE6\x83\x85\xE3\x80\x82\xE8\xBF\x99\xE4\xB8\xAA\xE4\xB8\x8E
 504i2c \xE9\xA9\xB1\xE5\x8A\xA8\xE4\xB8\x8D\xE5\x90\x8C\xEF\xBC\x8C\xE8\xBE\x83\xE5\xAE\xB9\xE6\x98\x93\xE6\xB7\xB7\xE6\xB7\x86\xE3\x80\x82\xE8\xA6\x81\xE7\x9F\xA5\xE9\x81\x93\xE6\x94\xAF\xE6\x8C\x81\xE5\x93\xAA\xE4\xBA\x9B\xE8\x8A\xAF\xE7\x89\x87\xE5\x8F\x98\xE4\xBD\x93\xEF\xBC\x8C\xE4\xBD\xA0\xE5\x8F\xAF\xE4\xBB\xA5\xE6\x9F\xA5\xE9\x98\x85 i2c
 505\xE9\xA9\xB1\xE5\x8A\xA8\xE4\xBB\xA3\xE7\xA0\x81\xE7\x9A\x84 i2c_device_id \xE8\xA1\xA8\xEF\xBC\x8C\xE4\xB8\x8A\xE9\x9D\xA2\xE5\x88\x97\xE5\x87\xBA\xE4\xBA\x86\xE6\x89\x80\xE6\x9C\x89\xE5\x8F\xAF\xE8\x83\xBD\xE6\x94\xAF\xE6\x8C\x81\xE7\x9A\x84\xE8\x8A\xAF\xE7\x89\x87\xE3\x80\x82
 506
 507\xE8\xBF\x98\xE6\x9C\x89\xE4\xB8\xA4\xE4\xB8\xAA\xE8\xBE\x85\xE5\x8A\xA9\xE5\x87\xBD\xE6\x95\xB0\xEF\xBC\x9A
 508
 509v4l2_i2c_new_subdev_cfg\xEF\xBC\x9A\xE8\xBF\x99\xE4\xB8\xAA\xE5\x87\xBD\xE6\x95\xB0\xE6\xB7\xBB\xE5\x8A\xA0\xE6\x96\xB0\xE7\x9A\x84 irq \xE5\x92\x8C platform_data
 510\xE5\x8F\x82\xE6\x95\xB0\xEF\xBC\x8C\xE5\xB9\xB6\xE6\x9C\x89\xE2\x80\x98addr\xE2\x80\x99\xE5\x92\x8C\xE2\x80\x98probed_addrs\xE2\x80\x99\xE5\x8F\x82\xE6\x95\xB0\xEF\xBC\x9A\xE5\xA6\x82\xE6\x9E\x9C addr \xE9\x9D\x9E\xE9\x9B\xB6\xEF\xBC\x8C\xE5\x88\x99\xE8\xA2\xAB\xE4\xBD\xBF\xE7\x94\xA8
 511\xEF\xBC\x88\xE4\xB8\x8D\xE6\x8E\xA2\xE6\xB5\x8B\xE5\x8F\x98\xE4\xBD\x93\xEF\xBC\x89\xEF\xBC\x8C\xE5\x90\xA6\xE5\x88\x99 probed_addrs \xE4\xB8\xAD\xE7\x9A\x84\xE5\x9C\xB0\xE5\x9D\x80\xE5\xB0\x86\xE7\x94\xA8\xE4\xBA\x8E\xE8\x87\xAA\xE5\x8A\xA8\xE6\x8E\xA2\xE6\xB5\x8B\xE3\x80\x82
 512
 513\xE4\xBE\x8B\xE5\xA6\x82\xEF\xBC\x9A\xE4\xBB\xA5\xE4\xB8\x8B\xE4\xBB\xA3\xE7\xA0\x81\xE5\xB0\x86\xE4\xBC\x9A\xE6\x8E\xA2\xE6\xB5\x8B\xE5\x9C\xB0\xE5\x9D\x80\xEF\xBC\x880x10\xEF\xBC\x89\xEF\xBC\x9A
 514
 515struct v4l2_subdev *sd = v4l2_i2c_new_subdev_cfg(v4l2_dev, adapter,
 516               "module_foo", "chipid", 0, NULL, 0, I2C_ADDRS(0x10));
 517
 518v4l2_i2c_new_subdev_board \xE4\xBD\xBF\xE7\x94\xA8\xE4\xB8\x80\xE4\xB8\xAA i2c_board_info \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xEF\xBC\x8C\xE5\xB0\x86\xE5\x85\xB6
 519\xE6\x9B\xBF\xE4\xBB\xA3 irq\xE3\x80\x81platform_data \xE5\x92\x8C add r\xE5\x8F\x82\xE6\x95\xB0\xE4\xBC\xA0\xE9\x80\x92\xE7\xBB\x99 i2c \xE9\xA9\xB1\xE5\x8A\xA8\xE3\x80\x82
 520
 521\xE5\xA6\x82\xE6\x9E\x9C\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE6\x94\xAF\xE6\x8C\x81 s_config \xE6\xA0\xB8\xE5\xBF\x83\xE6\x93\x8D\xE4\xBD\x9C\xEF\xBC\x8C\xE8\xBF\x99\xE4\xB8\xAA\xE6\x93\x8D\xE4\xBD\x9C\xE4\xBC\x9A\xE5\x9C\xA8\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE9\x85\x8D\xE7\xBD\xAE\xE5\xA5\xBD\xE4\xB9\x8B\xE5\x90\x8E\xE4\xBB\xA5 irq \xE5\x92\x8C
 522platform_data \xE4\xB8\xBA\xE5\x8F\x82\xE6\x95\xB0\xE8\xB0\x83\xE7\x94\xA8\xE3\x80\x82\xE6\x97\xA9\xE6\x9C\x9F\xE7\x9A\x84 v4l2_i2c_new_(probed_)subdev \xE5\x87\xBD\xE6\x95\xB0
 523\xE5\x90\x8C\xE6\xA0\xB7\xE4\xB9\x9F\xE4\xBC\x9A\xE8\xB0\x83\xE7\x94\xA8 s_config\xEF\xBC\x8C\xE4\xBD\x86\xE4\xBB\x85\xE5\x9C\xA8 irq \xE4\xB8\xBA 0 \xE4\xB8\x94 platform_data \xE4\xB8\xBA NULL \xE6\x97\xB6\xE3\x80\x82
 524
 525video_device\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93
 526-----------------
 527
 528\xE5\x9C\xA8 /dev \xE7\x9B\xAE\xE5\xBD\x95\xE4\xB8\x8B\xE7\x9A\x84\xE5\xAE\x9E\xE9\x99\x85\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE6\xA0\xB9\xE6\x8D\xAE video_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93(v4l2-dev.h)
 529\xE5\x88\x9B\xE5\xBB\xBA\xE3\x80\x82\xE6\xAD\xA4\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE6\x97\xA2\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x8A\xA8\xE6\x80\x81\xE5\x88\x86\xE9\x85\x8D\xE4\xB9\x9F\xE5\x8F\xAF\xE4\xBB\xA5\xE5\xB5\x8C\xE5\x85\xA5\xE5\x88\xB0\xE4\xB8\x80\xE4\xB8\xAA\xE6\x9B\xB4\xE5\xA4\xA7\xE7\x9A\x84\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE3\x80\x82
 530
 531\xE5\x8A\xA8\xE6\x80\x81\xE5\x88\x86\xE9\x85\x8D\xE6\x96\xB9\xE6\xB3\x95\xE5\xA6\x82\xE4\xB8\x8B\xEF\xBC\x9A
 532
 533        struct video_device *vdev = video_device_alloc();
 534
 535        if (vdev == NULL)
 536                return -ENOMEM;
 537
 538        vdev->release = video_device_release;
 539
 540\xE5\xA6\x82\xE6\x9E\x9C\xE5\xB0\x86\xE5\x85\xB6\xE5\xB5\x8C\xE5\x85\xA5\xE5\x88\xB0\xE4\xB8\x80\xE4\xB8\xAA\xE5\xA4\xA7\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xEF\xBC\x8C\xE5\x88\x99\xE5\xBF\x85\xE9\xA1\xBB\xE8\x87\xAA\xE5\xB7\xB1\xE5\xAE\x9E\xE7\x8E\xB0 release()\xE5\x9B\x9E\xE8\xB0\x83\xE3\x80\x82
 541
 542        struct video_device *vdev = &my_vdev->vdev;
 543
 544        vdev->release = my_vdev_release;
 545
 546release()\xE5\x9B\x9E\xE8\xB0\x83\xE5\xBF\x85\xE9\xA1\xBB\xE8\xA2\xAB\xE8\xAE\xBE\xE7\xBD\xAE\xEF\xBC\x8C\xE4\xB8\x94\xE5\x9C\xA8\xE6\x9C\x80\xE5\x90\x8E\xE4\xB8\x80\xE4\xB8\xAA video_device \xE7\x94\xA8\xE6\x88\xB7\xE9\x80\x80\xE5\x87\xBA\xE4\xB9\x8B\xE5\x90\x8E
 547\xE8\xA2\xAB\xE8\xB0\x83\xE7\x94\xA8\xE3\x80\x82
 548
 549\xE9\xBB\x98\xE8\xAE\xA4\xE7\x9A\x84 video_device_release()\xE5\x9B\x9E\xE8\xB0\x83\xE5\x8F\xAA\xE6\x98\xAF\xE8\xB0\x83\xE7\x94\xA8 kfree \xE6\x9D\xA5\xE9\x87\x8A\xE6\x94\xBE\xE4\xB9\x8B\xE5\x89\x8D\xE5\x88\x86\xE9\x85\x8D\xE7\x9A\x84
 550\xE5\x86\x85\xE5\xAD\x98\xE3\x80\x82
 551
 552\xE4\xBD\xA0\xE5\xBA\x94\xE8\xAF\xA5\xE8\xAE\xBE\xE7\xBD\xAE\xE8\xBF\x99\xE4\xBA\x9B\xE5\x9F\x9F\xEF\xBC\x9A
 553
 554- v4l2_dev: \xE8\xAE\xBE\xE7\xBD\xAE\xE4\xB8\xBA v4l2_device \xE7\x88\xB6\xE8\xAE\xBE\xE5\xA4\x87\xE3\x80\x82
 555
 556- name: \xE8\xAE\xBE\xE7\xBD\xAE\xE4\xB8\xBA\xE5\x94\xAF\xE4\xB8\x80\xE7\x9A\x84\xE6\x8F\x8F\xE8\xBF\xB0\xE6\x80\xA7\xE8\xAE\xBE\xE5\xA4\x87\xE5\x90\x8D\xE3\x80\x82
 557
 558- fops: \xE8\xAE\xBE\xE7\xBD\xAE\xE4\xB8\xBA\xE5\xB7\xB2\xE6\x9C\x89\xE7\x9A\x84 v4l2_file_operations \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE3\x80\x82
 559
 560- ioctl_ops: \xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE4\xBD\xBF\xE7\x94\xA8v4l2_ioctl_ops \xE6\x9D\xA5\xE7\xAE\x80\xE5\x8C\x96 ioctl \xE7\x9A\x84\xE7\xBB\xB4\xE6\x8A\xA4
 561  (\xE5\xBC\xBA\xE7\x83\x88\xE5\xBB\xBA\xE8\xAE\xAE\xE4\xBD\xBF\xE7\x94\xA8\xEF\xBC\x8C\xE4\xB8\x94\xE5\xB0\x86\xE6\x9D\xA5\xE5\x8F\xAF\xE8\x83\xBD\xE5\x8F\x98\xE4\xB8\xBA\xE5\xBC\xBA\xE5\x88\xB6\xE6\x80\xA7\xE7\x9A\x84!)\xEF\xBC\x8C\xE7\x84\xB6\xE5\x90\x8E\xE8\xAE\xBE\xE7\xBD\xAE\xE4\xBD\xA0\xE8\x87\xAA\xE5\xB7\xB1\xE7\x9A\x84
 562  v4l2_ioctl_ops \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93.
 563
 564- lock: \xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE8\xA6\x81\xE5\x9C\xA8\xE9\xA9\xB1\xE5\x8A\xA8\xE4\xB8\xAD\xE5\xAE\x9E\xE7\x8E\xB0\xE6\x89\x80\xE6\x9C\x89\xE7\x9A\x84\xE9\x94\x81\xE6\x93\x8D\xE4\xBD\x9C\xEF\xBC\x8C\xE5\x88\x99\xE8\xAE\xBE\xE4\xB8\xBA NULL \xE3\x80\x82\xE5\x90\xA6\xE5\x88\x99
 565  \xE5\xB0\xB1\xE8\xA6\x81\xE8\xAE\xBE\xE7\xBD\xAE\xE4\xB8\x80\xE4\xB8\xAA\xE6\x8C\x87\xE5\x90\x91 struct mutex_lock \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE7\x9A\x84\xE6\x8C\x87\xE9\x92\x88\xEF\xBC\x8C\xE8\xBF\x99\xE4\xB8\xAA\xE9\x94\x81\xE5\xB0\x86
 566  \xE5\x9C\xA8 unlocked_ioctl \xE6\x96\x87\xE4\xBB\xB6\xE6\x93\x8D\xE4\xBD\x9C\xE8\xA2\xAB\xE8\xB0\x83\xE7\x94\xA8\xE5\x89\x8D\xE7\x94\xB1\xE5\x86\x85\xE6\xA0\xB8\xE8\x8E\xB7\xE5\xBE\x97\xEF\xBC\x8C\xE5\xB9\xB6\xE5\x9C\xA8\xE8\xB0\x83\xE7\x94\xA8\xE8\xBF\x94\xE5\x9B\x9E\xE5\x90\x8E
 567  \xE9\x87\x8A\xE6\x94\xBE\xE3\x80\x82\xE8\xAF\xA6\xE8\xA7\x81\xE4\xB8\x8B\xE4\xB8\x80\xE8\x8A\x82\xE3\x80\x82
 568
 569- prio: \xE4\xBF\x9D\xE6\x8C\x81\xE5\xAF\xB9\xE4\xBC\x98\xE5\x85\x88\xE7\xBA\xA7\xE7\x9A\x84\xE8\xB7\x9F\xE8\xB8\xAA\xE3\x80\x82\xE7\x94\xA8\xE4\xBA\x8E\xE5\xAE\x9E\xE7\x8E\xB0 VIDIOC_G/S_PRIORITY\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C
 570  \xE8\xAE\xBE\xE7\xBD\xAE\xE4\xB8\xBA NULL\xEF\xBC\x8C\xE5\x88\x99\xE4\xBC\x9A\xE4\xBD\xBF\xE7\x94\xA8 v4l2_device \xE4\xB8\xAD\xE7\x9A\x84 v4l2_prio_state \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE3\x80\x82
 571  \xE5\xA6\x82\xE6\x9E\x9C\xE8\xA6\x81\xE5\xAF\xB9\xE6\xAF\x8F\xE4\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xEF\xBC\x88\xE7\xBB\x84\xEF\xBC\x89\xE5\xAE\x9E\xE7\x8E\xB0\xE7\x8B\xAC\xE7\xAB\x8B\xE7\x9A\x84\xE4\xBC\x98\xE5\x85\x88\xE7\xBA\xA7\xEF\xBC\x8C\xE5\x8F\xAF\xE4\xBB\xA5\xE5\xB0\x86\xE5\x85\xB6\xE6\x8C\x87\xE5\x90\x91\xE8\x87\xAA\xE5\xB7\xB1
 572  \xE5\xAE\x9E\xE7\x8E\xB0\xE7\x9A\x84 v4l2_prio_state \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE3\x80\x82
 573
 574- parent: \xE4\xBB\x85\xE5\x9C\xA8\xE4\xBD\xBF\xE7\x94\xA8 NULL \xE4\xBD\x9C\xE4\xB8\xBA\xE7\x88\xB6\xE8\xAE\xBE\xE5\xA4\x87\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE5\x8F\x82\xE6\x95\xB0\xE6\xB3\xA8\xE5\x86\x8C v4l2_device \xE6\x97\xB6
 575  \xE8\xAE\xBE\xE7\xBD\xAE\xE6\xAD\xA4\xE5\x8F\x82\xE6\x95\xB0\xE3\x80\x82\xE5\x8F\xAA\xE6\x9C\x89\xE5\x9C\xA8\xE4\xB8\x80\xE4\xB8\xAA\xE7\xA1\xAC\xE4\xBB\xB6\xE8\xAE\xBE\xE5\xA4\x87\xE5\x8C\x85\xE5\x90\xAB\xE5\xA4\x9A\xE4\xB8\x80\xE4\xB8\xAA PCI \xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x8C\xE5\x85\xB1\xE4\xBA\xAB\xE5\x90\x8C\xE4\xB8\x80\xE4\xB8\xAA
 576  v4l2_device \xE6\xA0\xB8\xE5\xBF\x83\xE6\x97\xB6\xE6\x89\x8D\xE4\xBC\x9A\xE5\x8F\x91\xE7\x94\x9F\xE3\x80\x82
 577
 578  cx88 \xE9\xA9\xB1\xE5\x8A\xA8\xE5\xB0\xB1\xE6\x98\xAF\xE4\xB8\x80\xE4\xB8\xAA\xE4\xBE\x8B\xE5\xAD\x90\xEF\xBC\x9A\xE4\xB8\x80\xE4\xB8\xAA v4l2_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE6\xA0\xB8\xE5\xBF\x83\xEF\xBC\x8C\xE8\xA2\xAB\xE4\xB8\x80\xE4\xB8\xAA\xE8\xA3\xB8\xE7\x9A\x84
 579  \xE8\xA7\x86\xE9\xA2\x91 PCI \xE8\xAE\xBE\xE5\xA4\x87(cx8800)\xE5\x92\x8C\xE4\xB8\x80\xE4\xB8\xAA MPEG PCI \xE8\xAE\xBE\xE5\xA4\x87(cx8802)\xE5\x85\xB1\xE7\x94\xA8\xE3\x80\x82\xE7\x94\xB1\xE4\xBA\x8E
 580  v4l2_device \xE6\x97\xA0\xE6\xB3\x95\xE4\xB8\x8E\xE7\x89\xB9\xE5\xAE\x9A\xE7\x9A\x84 PCI \xE8\xAE\xBE\xE5\xA4\x87\xE5\x85\xB3\xE8\x81\x94\xEF\xBC\x8C\xE6\x89\x80\xE6\x9C\x89\xE6\xB2\xA1\xE6\x9C\x89\xE8\xAE\xBE\xE7\xBD\xAE\xE7\x88\xB6\xE8\xAE\xBE\xE5\xA4\x87\xE3\x80\x82\xE4\xBD\x86\xE5\xBD\x93
 581  video_device \xE9\x85\x8D\xE7\xBD\xAE\xE5\x90\x8E\xEF\xBC\x8C\xE5\xB0\xB1\xE7\x9F\xA5\xE9\x81\x93\xE4\xBD\xBF\xE7\x94\xA8\xE5\x93\xAA\xE4\xB8\xAA\xE7\x88\xB6 PCI \xE8\xAE\xBE\xE5\xA4\x87\xE4\xBA\x86\xE3\x80\x82
 582
 583- flags\xEF\xBC\x9A\xE5\x8F\xAF\xE9\x80\x89\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE8\xA6\x81\xE8\xAE\xA9\xE6\xA1\x86\xE6\x9E\xB6\xE5\xA4\x84\xE7\x90\x86\xE8\xAE\xBE\xE7\xBD\xAE VIDIOC_G/S_PRIORITY ioctls\xEF\xBC\x8C
 584  \xE8\xAF\xB7\xE8\xAE\xBE\xE7\xBD\xAE V4L2_FL_USE_FH_PRIO\xE3\x80\x82\xE8\xBF\x99\xE8\xA6\x81\xE6\xB1\x82\xE4\xBD\xA0\xE4\xBD\xBF\xE7\x94\xA8 v4l2_fh \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE3\x80\x82
 585  \xE4\xB8\x80\xE6\x97\xA6\xE6\x89\x80\xE6\x9C\x89\xE9\xA9\xB1\xE5\x8A\xA8\xE4\xBD\xBF\xE7\x94\xA8\xE4\xBA\x86\xE6\xA0\xB8\xE5\xBF\x83\xE7\x9A\x84\xE4\xBC\x98\xE5\x85\x88\xE7\xBA\xA7\xE5\xA4\x84\xE7\x90\x86\xEF\xBC\x8C\xE6\x9C\x80\xE7\xBB\x88\xE8\xBF\x99\xE4\xB8\xAA\xE6\xA0\x87\xE5\xBF\x97\xE5\xB0\x86\xE6\xB6\x88\xE5\xA4\xB1\xE3\x80\x82\xE4\xBD\x86\xE7\x8E\xB0\xE5\x9C\xA8\xE5\xAE\x83
 586  \xE5\xBF\x85\xE9\xA1\xBB\xE8\xA2\xAB\xE6\x98\xBE\xE5\xBC\x8F\xE8\xAE\xBE\xE7\xBD\xAE\xE3\x80\x82
 587
 588\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE4\xBD\xBF\xE7\x94\xA8 v4l2_ioctl_ops\xEF\xBC\x8C\xE5\x88\x99\xE5\xBA\x94\xE8\xAF\xA5\xE5\x9C\xA8 v4l2_file_operations \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD
 589\xE8\xAE\xBE\xE7\xBD\xAE .unlocked_ioctl \xE6\x8C\x87\xE5\x90\x91 video_ioctl2\xE3\x80\x82
 590
 591\xE8\xAF\xB7\xE5\x8B\xBF\xE4\xBD\xBF\xE7\x94\xA8 .ioctl\xEF\xBC\x81\xE5\xAE\x83\xE5\xB7\xB2\xE8\xA2\xAB\xE5\xBA\x9F\xE5\xBC\x83\xEF\xBC\x8C\xE4\xBB\x8A\xE5\x90\x8E\xE5\xB0\x86\xE6\xB6\x88\xE5\xA4\xB1\xE3\x80\x82
 592
 593\xE6\x9F\x90\xE4\xBA\x9B\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xE4\xBD\xA0\xE8\xA6\x81\xE5\x91\x8A\xE8\xAF\x89\xE6\xA0\xB8\xE5\xBF\x83\xEF\xBC\x9A\xE4\xBD\xA0\xE5\x9C\xA8 v4l2_ioctl_ops \xE6\x8C\x87\xE5\xAE\x9A\xE7\x9A\x84\xE6\x9F\x90\xE4\xB8\xAA\xE5\x87\xBD\xE6\x95\xB0\xE5\xBA\x94\xE8\xA2\xAB\xE5\xBF\xBD\xE7\x95\xA5\xE3\x80\x82
 594\xE4\xBD\xA0\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x9C\xA8 video_device_register \xE8\xA2\xAB\xE8\xB0\x83\xE7\x94\xA8\xE5\x89\x8D\xE9\x80\x9A\xE8\xBF\x87\xE4\xBB\xA5\xE4\xB8\x8B\xE5\x87\xBD\xE6\x95\xB0\xE6\xA0\x87\xE8\xAE\xB0\xE8\xBF\x99\xE4\xB8\xAA ioctls\xE3\x80\x82
 595
 596void v4l2_disable_ioctl(struct video_device *vdev, unsigned int cmd);
 597
 598\xE5\x9F\xBA\xE4\xBA\x8E\xE5\xA4\x96\xE9\x83\xA8\xE5\x9B\xA0\xE7\xB4\xA0\xEF\xBC\x88\xE4\xBE\x8B\xE5\xA6\x82\xE6\x9F\x90\xE4\xB8\xAA\xE6\x9D\xBF\xE5\x8D\xA1\xE5\xB7\xB2\xE8\xA2\xAB\xE4\xBD\xBF\xE7\x94\xA8\xEF\xBC\x89\xEF\xBC\x8C\xE5\x9C\xA8\xE4\xB8\x8D\xE5\x88\x9B\xE5\xBB\xBA\xE6\x96\xB0\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE7\x9A\x84\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xEF\xBC\x8C\xE4\xBD\xA0\xE6\x83\xB3
 599\xE8\xA6\x81\xE5\x85\xB3\xE9\x97\xAD v4l2_ioctl_ops \xE4\xB8\xAD\xE6\x9F\x90\xE4\xB8\xAA\xE7\x89\xB9\xE6\x80\xA7\xE5\xBE\x80\xE5\xBE\x80\xE9\x9C\x80\xE8\xA6\x81\xE8\xBF\x99\xE4\xB8\xAA\xE6\x9C\xBA\xE5\x88\xB6\xE3\x80\x82
 600
 601v4l2_file_operations \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE6\x98\xAF file_operations \xE7\x9A\x84\xE4\xB8\x80\xE4\xB8\xAA\xE5\xAD\x90\xE9\x9B\x86\xE3\x80\x82\xE5\x85\xB6\xE4\xB8\xBB\xE8\xA6\x81
 602\xE5\x8C\xBA\xE5\x88\xAB\xE5\x9C\xA8\xE4\xBA\x8E\xEF\xBC\x9A\xE5\x9B\xA0 inode \xE5\x8F\x82\xE6\x95\xB0\xE4\xBB\x8E\xE6\x9C\xAA\xE8\xA2\xAB\xE4\xBD\xBF\xE7\x94\xA8\xEF\xBC\x8C\xE5\xAE\x83\xE5\xB0\x86\xE8\xA2\xAB\xE5\xBF\xBD\xE7\x95\xA5\xE3\x80\x82
 603
 604\xE5\xA6\x82\xE6\x9E\x9C\xE9\x9C\x80\xE8\xA6\x81\xE4\xB8\x8E\xE5\xAA\x92\xE4\xBD\x93\xE6\xA1\x86\xE6\x9E\xB6\xE6\x95\xB4\xE5\x90\x88\xEF\xBC\x8C\xE4\xBD\xA0\xE5\xBF\x85\xE9\xA1\xBB\xE9\x80\x9A\xE8\xBF\x87\xE8\xB0\x83\xE7\x94\xA8 media_entity_init() \xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96
 605\xE5\xB5\x8C\xE5\x85\xA5\xE5\x9C\xA8 video_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE7\x9A\x84 media_entity\xEF\xBC\x88entity \xE5\x9F\x9F\xEF\xBC\x89\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xEF\xBC\x9A
 606
 607        struct media_pad *pad = &my_vdev->pad;
 608        int err;
 609
 610        err = media_entity_init(&vdev->entity, 1, pad, 0);
 611
 612pads \xE6\x95\xB0\xE7\xBB\x84\xE5\xBF\x85\xE9\xA1\xBB\xE9\xA2\x84\xE5\x85\x88\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96\xE3\x80\x82\xE6\xB2\xA1\xE6\x9C\x89\xE5\xBF\x85\xE8\xA6\x81\xE6\x89\x8B\xE5\x8A\xA8\xE8\xAE\xBE\xE7\xBD\xAE media_entity \xE7\x9A\x84 type \xE5\x92\x8C
 613name \xE5\x9F\x9F\xE3\x80\x82
 614
 615\xE5\xBD\x93\xEF\xBC\x88\xE4\xBB\xBB\xE4\xBD\x95\xEF\xBC\x89\xE5\xAD\x90\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE8\xA2\xAB\xE6\x89\x93\xE5\xBC\x80/\xE5\x85\xB3\xE9\x97\xAD\xEF\xBC\x8C\xE5\xAF\xB9 entity \xE7\x9A\x84\xE5\xBC\x95\xE7\x94\xA8\xE5\xB0\x86\xE8\xA2\xAB\xE8\x87\xAA\xE5\x8A\xA8\xE8\x8E\xB7\xE5\x8F\x96/\xE9\x87\x8A\xE6\x94\xBE\xE3\x80\x82
 616
 617v4l2_file_operations \xE4\xB8\x8E\xE9\x94\x81
 618--------------------------
 619
 620\xE4\xBD\xA0\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x9C\xA8 video_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE8\xAE\xBE\xE7\xBD\xAE\xE4\xB8\x80\xE4\xB8\xAA\xE6\x8C\x87\xE5\x90\x91 mutex_lock \xE7\x9A\x84\xE6\x8C\x87\xE9\x92\x88\xE3\x80\x82\xE9\x80\x9A\xE5\xB8\xB8
 621\xE8\xBF\x99\xE6\x97\xA2\xE5\x8F\xAF\xE6\x98\xAF\xE4\xB8\x80\xE4\xB8\xAA\xE9\xA1\xB6\xE5\xB1\x82\xE4\xBA\x92\xE6\x96\xA5\xE9\x94\x81\xE4\xB9\x9F\xE5\x8F\xAF\xE4\xB8\xBA\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE8\x87\xAA\xE8\xBA\xAB\xE7\x9A\x84\xE4\xBA\x92\xE6\x96\xA5\xE9\x94\x81\xE3\x80\x82\xE9\xBB\x98\xE8\xAE\xA4\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xEF\xBC\x8C\xE6\xAD\xA4\xE9\x94\x81
 622\xE7\x94\xA8\xE4\xBA\x8E unlocked_ioctl\xEF\xBC\x8C\xE4\xBD\x86\xE4\xB8\xBA\xE4\xBA\x86\xE4\xBD\xBF\xE7\x94\xA8 ioctls \xE4\xBD\xA0\xE9\x80\x9A\xE8\xBF\x87\xE4\xBB\xA5\xE4\xB8\x8B\xE5\x87\xBD\xE6\x95\xB0\xE5\x8F\xAF\xE7\xA6\x81\xE7\x94\xA8\xE9\x94\x81\xE5\xAE\x9A\xEF\xBC\x9A
 623
 624        void v4l2_disable_ioctl_locking(struct video_device *vdev, unsigned int cmd);
 625
 626\xE4\xBE\x8B\xE5\xA6\x82: v4l2_disable_ioctl_locking(vdev, VIDIOC_DQBUF);
 627
 628\xE4\xBD\xA0\xE5\xBF\x85\xE9\xA1\xBB\xE5\x9C\xA8\xE6\xB3\xA8\xE5\x86\x8C video_device \xE5\x89\x8D\xE8\xB0\x83\xE7\x94\xA8\xE8\xBF\x99\xE4\xB8\xAA\xE5\x87\xBD\xE6\x95\xB0\xE3\x80\x82
 629
 630\xE7\x89\xB9\xE5\x88\xAB\xE6\x98\xAF\xE5\xAF\xB9\xE4\xBA\x8E USB \xE9\xA9\xB1\xE5\x8A\xA8\xE7\xA8\x8B\xE5\xBA\x8F\xEF\xBC\x8C\xE6\x9F\x90\xE4\xBA\x9B\xE5\x91\xBD\xE4\xBB\xA4\xEF\xBC\x88\xE5\xA6\x82\xE8\xAE\xBE\xE7\xBD\xAE\xE6\x8E\xA7\xE5\x88\xB6\xEF\xBC\x89\xE9\x9C\x80\xE8\xA6\x81\xE5\xBE\x88\xE9\x95\xBF\xE7\x9A\x84\xE6\x97\xB6\xE9\x97\xB4\xEF\xBC\x8C\xE5\x8F\xAF\xE8\x83\xBD
 631\xE9\x9C\x80\xE8\xA6\x81\xE8\x87\xAA\xE8\xA1\x8C\xE4\xB8\xBA\xE7\xBC\x93\xE5\x86\xB2\xE5\x8C\xBA\xE9\x98\x9F\xE5\x88\x97\xE7\x9A\x84 ioctls \xE5\xAE\x9E\xE7\x8E\xB0\xE9\x94\x81\xE5\xAE\x9A\xE3\x80\x82
 632
 633\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE9\x9C\x80\xE8\xA6\x81\xE6\x9B\xB4\xE7\xBB\x86\xE7\xB2\x92\xE5\xBA\xA6\xE7\x9A\x84\xE9\x94\x81\xEF\xBC\x8C\xE4\xBD\xA0\xE5\xBF\x85\xE9\xA1\xBB\xE8\xAE\xBE\xE7\xBD\xAE mutex_lock \xE4\xB8\xBA NULL\xEF\xBC\x8C\xE5\xB9\xB6\xE5\xAE\x8C\xE5\x85\xA8\xE8\x87\xAA\xE5\xB7\xB1\xE5\xAE\x9E\xE7\x8E\xB0
 634\xE9\x94\x81\xE6\x9C\xBA\xE5\x88\xB6\xE3\x80\x82
 635
 636\xE8\xBF\x99\xE5\xAE\x8C\xE5\x85\xA8\xE7\x94\xB1\xE9\xA9\xB1\xE5\x8A\xA8\xE5\xBC\x80\xE5\x8F\x91\xE8\x80\x85\xE5\x86\xB3\xE5\xAE\x9A\xE4\xBD\xBF\xE7\x94\xA8\xE4\xBD\x95\xE7\xA7\x8D\xE6\x96\xB9\xE6\xB3\x95\xE3\x80\x82\xE7\x84\xB6\xE8\x80\x8C\xEF\xBC\x8C\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE7\x9A\x84\xE9\xA9\xB1\xE5\x8A\xA8\xE5\xAD\x98\xE5\x9C\xA8\xE9\x95\xBF\xE5\xBB\xB6\xE6\x97\xB6\xE6\x93\x8D\xE4\xBD\x9C
 637\xEF\xBC\x88\xE4\xBE\x8B\xE5\xA6\x82\xEF\xBC\x8C\xE6\x94\xB9\xE5\x8F\x98 USB \xE6\x91\x84\xE5\x83\x8F\xE5\xA4\xB4\xE7\x9A\x84\xE6\x9B\x9D\xE5\x85\x89\xE6\x97\xB6\xE9\x97\xB4\xE5\x8F\xAF\xE8\x83\xBD\xE9\x9C\x80\xE8\xA6\x81\xE8\xBE\x83\xE9\x95\xBF\xE6\x97\xB6\xE9\x97\xB4\xEF\xBC\x89\xEF\xBC\x8C\xE8\x80\x8C\xE4\xBD\xA0\xE5\x8F\x88\xE6\x83\xB3\xE8\xAE\xA9\xE7\x94\xA8\xE6\x88\xB7
 638\xE5\x9C\xA8\xE7\xAD\x89\xE5\xBE\x85\xE9\x95\xBF\xE5\xBB\xB6\xE6\x97\xB6\xE6\x93\x8D\xE4\xBD\x9C\xE5\xAE\x8C\xE6\x88\x90\xE6\x9C\x9F\xE9\x97\xB4\xE5\x81\x9A\xE5\x85\xB6\xE4\xBB\x96\xE7\x9A\x84\xE4\xBA\x8B\xEF\xBC\x8C\xE5\x88\x99\xE4\xBD\xA0\xE6\x9C\x80\xE5\xA5\xBD\xE8\x87\xAA\xE5\xB7\xB1\xE5\xAE\x9E\xE7\x8E\xB0\xE9\x94\x81\xE6\x9C\xBA\xE5\x88\xB6\xE3\x80\x82
 639
 640\xE5\xA6\x82\xE6\x9E\x9C\xE6\x8C\x87\xE5\xAE\x9A\xE4\xB8\x80\xE4\xB8\xAA\xE9\x94\x81\xEF\xBC\x8C\xE5\x88\x99\xE6\x89\x80\xE6\x9C\x89 ioctl \xE6\x93\x8D\xE4\xBD\x9C\xE5\xB0\x86\xE5\x9C\xA8\xE8\xBF\x99\xE4\xB8\xAA\xE9\x94\x81\xE7\x9A\x84\xE4\xBD\x9C\xE7\x94\xA8\xE4\xB8\x8B\xE4\xB8\xB2\xE8\xA1\x8C\xE6\x89\xA7\xE8\xA1\x8C\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0
 641\xE4\xBD\xBF\xE7\x94\xA8 videobuf\xEF\xBC\x8C\xE5\x88\x99\xE5\xBF\x85\xE9\xA1\xBB\xE5\xB0\x86\xE5\x90\x8C\xE4\xB8\x80\xE4\xB8\xAA\xE9\x94\x81\xE4\xBC\xA0\xE9\x80\x92\xE7\xBB\x99 videobuf \xE9\x98\x9F\xE5\x88\x97\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96\xE5\x87\xBD\xE6\x95\xB0\xEF\xBC\x9B\xE5\xA6\x82
 642videobuf \xE5\xBF\x85\xE9\xA1\xBB\xE7\xAD\x89\xE5\xBE\x85\xE4\xB8\x80\xE5\xB8\xA7\xE7\x9A\x84\xE5\x88\xB0\xE8\xBE\xBE\xEF\xBC\x8C\xE5\x88\x99\xE5\x8F\xAF\xE4\xB8\xB4\xE6\x97\xB6\xE8\xA7\xA3\xE9\x94\x81\xE5\xB9\xB6\xE5\x9C\xA8\xE8\xBF\x99\xE4\xB9\x8B\xE5\x90\x8E\xE9\x87\x8D\xE6\x96\xB0\xE4\xB8\x8A\xE9\x94\x81\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE9\xA9\xB1\xE5\x8A\xA8
 643\xE4\xB9\x9F\xE5\x9C\xA8\xE4\xBB\xA3\xE7\xA0\x81\xE6\x89\xA7\xE8\xA1\x8C\xE6\x9C\x9F\xE9\x97\xB4\xE7\xAD\x89\xE5\xBE\x85\xEF\xBC\x8C\xE5\x88\x99\xE5\x8F\xAF\xE5\x81\x9A\xE5\x90\x8C\xE6\xA0\xB7\xE7\x9A\x84\xE5\xB7\xA5\xE4\xBD\x9C\xEF\xBC\x88\xE4\xB8\xB4\xE6\x97\xB6\xE8\xA7\xA3\xE9\x94\x81\xEF\xBC\x8C\xE5\x86\x8D\xE4\xB8\x8A\xE9\x94\x81\xEF\xBC\x89\xE8\xAE\xA9\xE5\x85\xB6\xE4\xBB\x96\xE8\xBF\x9B\xE7\xA8\x8B
 644\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x9C\xA8\xE7\xAC\xAC\xE4\xB8\x80\xE4\xB8\xAA\xE8\xBF\x9B\xE7\xA8\x8B\xE9\x98\xBB\xE5\xA1\x9E\xE6\x97\xB6\xE8\xAE\xBF\xE9\x97\xAE\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE3\x80\x82
 645
 646\xE5\x9C\xA8\xE4\xBD\xBF\xE7\x94\xA8 videobuf2 \xE7\x9A\x84\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xEF\xBC\x8C\xE5\xBF\x85\xE9\xA1\xBB\xE5\xAE\x9E\xE7\x8E\xB0 wait_prepare \xE5\x92\x8C wait_finish \xE5\x9B\x9E\xE8\xB0\x83
 647\xE5\x9C\xA8\xE9\x80\x82\xE5\xBD\x93\xE7\x9A\x84\xE6\x97\xB6\xE5\x80\x99\xE8\xA7\xA3\xE9\x94\x81/\xE5\x8A\xA0\xE9\x94\x81\xE3\x80\x82\xE8\xBF\x9B\xE4\xB8\x80\xE6\xAD\xA5\xE6\x9D\xA5\xE8\xAF\xB4\xEF\xBC\x8C\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE5\x9C\xA8 video_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE4\xBD\xBF\xE7\x94\xA8
 648\xE9\x94\x81\xEF\xBC\x8C\xE5\x88\x99\xE5\xBF\x85\xE9\xA1\xBB\xE5\x9C\xA8 wait_prepare \xE5\x92\x8C wait_finish \xE4\xB8\xAD\xE5\xAF\xB9\xE8\xBF\x99\xE4\xB8\xAA\xE4\xBA\x92\xE6\x96\xA5\xE9\x94\x81\xE8\xBF\x9B\xE8\xA1\x8C\xE8\xA7\xA3\xE9\x94\x81/\xE5\x8A\xA0\xE9\x94\x81\xE3\x80\x82
 649
 650\xE7\x83\xAD\xE6\x8F\x92\xE6\x8B\x94\xE7\x9A\x84\xE6\x96\xAD\xE5\xBC\x80\xE5\xAE\x9E\xE7\x8E\xB0\xE4\xB9\x9F\xE5\xBF\x85\xE9\xA1\xBB\xE5\x9C\xA8\xE8\xB0\x83\xE7\x94\xA8 v4l2_device_disconnect \xE5\x89\x8D\xE8\x8E\xB7\xE5\xBE\x97\xE9\x94\x81\xE3\x80\x82
 651
 652video_device\xE6\xB3\xA8\xE5\x86\x8C
 653---------------
 654
 655\xE6\x8E\xA5\xE4\xB8\x8B\xE6\x9D\xA5\xE4\xBD\xA0\xE9\x9C\x80\xE8\xA6\x81\xE6\xB3\xA8\xE5\x86\x8C\xE8\xA7\x86\xE9\xA2\x91\xE8\xAE\xBE\xE5\xA4\x87\xEF\xBC\x9A\xE8\xBF\x99\xE4\xBC\x9A\xE4\xB8\xBA\xE4\xBD\xA0\xE5\x88\x9B\xE5\xBB\xBA\xE4\xB8\x80\xE4\xB8\xAA\xE5\xAD\x97\xE7\xAC\xA6\xE8\xAE\xBE\xE5\xA4\x87\xE3\x80\x82
 656
 657        err = video_register_device(vdev, VFL_TYPE_GRABBER, -1);
 658        if (err) {
 659                video_device_release(vdev); /* or kfree(my_vdev); */
 660                return err;
 661        }
 662
 663\xE5\xA6\x82\xE6\x9E\x9C v4l2_device \xE7\x88\xB6\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84 mdev \xE5\x9F\x9F\xE4\xB8\xBA\xE9\x9D\x9E NULL \xE5\x80\xBC\xEF\xBC\x8C\xE8\xA7\x86\xE9\xA2\x91\xE8\xAE\xBE\xE5\xA4\x87\xE5\xAE\x9E\xE4\xBD\x93\xE5\xB0\x86\xE8\x87\xAA\xE5\x8A\xA8
 664\xE6\xB3\xA8\xE5\x86\x8C\xE4\xB8\xBA\xE5\xAA\x92\xE4\xBD\x93\xE8\xAE\xBE\xE5\xA4\x87\xE3\x80\x82
 665
 666\xE6\xB3\xA8\xE5\x86\x8C\xE5\x93\xAA\xE7\xA7\x8D\xE8\xAE\xBE\xE5\xA4\x87\xE6\x98\xAF\xE6\xA0\xB9\xE6\x8D\xAE\xE7\xB1\xBB\xE5\x9E\x8B\xEF\xBC\x88type\xEF\xBC\x89\xE5\x8F\x82\xE6\x95\xB0\xE3\x80\x82\xE5\xAD\x98\xE5\x9C\xA8\xE4\xBB\xA5\xE4\xB8\x8B\xE7\xB1\xBB\xE5\x9E\x8B\xEF\xBC\x9A
 667
 668VFL_TYPE_GRABBER: \xE7\x94\xA8\xE4\xBA\x8E\xE8\xA7\x86\xE9\xA2\x91\xE8\xBE\x93\xE5\x85\xA5/\xE8\xBE\x93\xE5\x87\xBA\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84 videoX
 669VFL_TYPE_VBI: \xE7\x94\xA8\xE4\xBA\x8E\xE5\x9E\x82\xE7\x9B\xB4\xE6\xB6\x88\xE9\x9A\x90\xE6\x95\xB0\xE6\x8D\xAE\xE7\x9A\x84 vbiX (\xE4\xBE\x8B\xE5\xA6\x82\xEF\xBC\x8C\xE9\x9A\x90\xE8\x97\x8F\xE5\xBC\x8F\xE5\xAD\x97\xE5\xB9\x95\xEF\xBC\x8C\xE5\x9B\xBE\xE6\x96\x87\xE7\x94\xB5\xE8\xA7\x86)
 670VFL_TYPE_RADIO: \xE7\x94\xA8\xE4\xBA\x8E\xE5\xB9\xBF\xE6\x92\xAD\xE8\xB0\x83\xE8\xB0\x90\xE5\x99\xA8\xE7\x9A\x84 radioX
 671
 672\xE6\x9C\x80\xE5\x90\x8E\xE4\xB8\x80\xE4\xB8\xAA\xE5\x8F\x82\xE6\x95\xB0\xE8\xAE\xA9\xE4\xBD\xA0\xE7\xA1\xAE\xE5\xAE\x9A\xE4\xB8\x80\xE4\xB8\xAA\xE6\x89\x80\xE6\x8E\xA7\xE5\x88\xB6\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE5\x8F\xB7\xE6\x95\xB0\xE9\x87\x8F(\xE4\xBE\x8B\xE5\xA6\x82 videoX \xE4\xB8\xAD\xE7\x9A\x84 X)\xE3\x80\x82
 673\xE9\x80\x9A\xE5\xB8\xB8\xE4\xBD\xA0\xE5\x8F\xAF\xE4\xBB\xA5\xE4\xBC\xA0\xE5\x85\xA5-1\xEF\xBC\x8C\xE8\xAE\xA9 v4l2 \xE6\xA1\x86\xE6\x9E\xB6\xE8\x87\xAA\xE5\xB7\xB1\xE9\x80\x89\xE6\x8B\xA9\xE7\xAC\xAC\xE4\xB8\x80\xE4\xB8\xAA\xE7\xA9\xBA\xE9\x97\xB2\xE7\x9A\x84\xE7\xBC\x96\xE5\x8F\xB7\xE3\x80\x82\xE4\xBD\x86\xE6\x98\xAF\xE6\x9C\x89\xE6\x97\xB6\xE7\x94\xA8\xE6\x88\xB7
 674\xE9\x9C\x80\xE8\xA6\x81\xE9\x80\x89\xE6\x8B\xA9\xE4\xB8\x80\xE4\xB8\xAA\xE7\x89\xB9\xE5\xAE\x9A\xE7\x9A\x84\xE8\x8A\x82\xE7\x82\xB9\xE5\x8F\xB7\xE3\x80\x82\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x85\x81\xE8\xAE\xB8\xE7\x94\xA8\xE6\x88\xB7\xE9\x80\x9A\xE8\xBF\x87\xE9\xA9\xB1\xE5\x8A\xA8\xE6\xA8\xA1\xE5\x9D\x97\xE5\x8F\x82\xE6\x95\xB0\xE9\x80\x89\xE6\x8B\xA9\xE4\xB8\x80\xE4\xB8\xAA\xE7\x89\xB9\xE5\xAE\x9A\xE7\x9A\x84
 675\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE5\x8F\xB7\xE6\x98\xAF\xE5\xBE\x88\xE6\x99\xAE\xE9\x81\x8D\xE7\x9A\x84\xE3\x80\x82\xE8\xBF\x99\xE4\xB8\xAA\xE7\xBC\x96\xE5\x8F\xB7\xE5\xB0\x86\xE4\xBC\x9A\xE4\xBC\xA0\xE9\x80\x92\xE7\xBB\x99\xE8\xBF\x99\xE4\xB8\xAA\xE5\x87\xBD\xE6\x95\xB0\xEF\xBC\x8C\xE4\xB8\x94 video_register_device
 676\xE5\xB0\x86\xE4\xBC\x9A\xE8\xAF\x95\xE5\x9B\xBE\xE9\x80\x89\xE6\x8B\xA9\xE8\xBF\x99\xE4\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE5\x8F\xB7\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE8\xBF\x99\xE4\xB8\xAA\xE7\xBC\x96\xE5\x8F\xB7\xE8\xA2\xAB\xE5\x8D\xA0\xE7\x94\xA8\xEF\xBC\x8C\xE4\xB8\x8B\xE4\xB8\x80\xE4\xB8\xAA\xE7\xA9\xBA\xE9\x97\xB2\xE7\x9A\x84\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9
 677\xE7\xBC\x96\xE5\x8F\xB7\xE5\xB0\x86\xE8\xA2\xAB\xE9\x80\x89\xE4\xB8\xAD\xEF\xBC\x8C\xE5\xB9\xB6\xE5\x90\x91\xE5\x86\x85\xE6\xA0\xB8\xE6\x97\xA5\xE5\xBF\x97\xE4\xB8\xAD\xE5\x8F\x91\xE9\x80\x81\xE4\xB8\x80\xE4\xB8\xAA\xE8\xAD\xA6\xE5\x91\x8A\xE4\xBF\xA1\xE6\x81\xAF\xE3\x80\x82
 678
 679\xE5\x8F\xA6\xE4\xB8\x80\xE4\xB8\xAA\xE4\xBD\xBF\xE7\x94\xA8\xE5\x9C\xBA\xE6\x99\xAF\xE6\x98\xAF\xE5\xBD\x93\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x88\x9B\xE5\xBB\xBA\xE5\xA4\x9A\xE4\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE6\x97\xB6\xE3\x80\x82\xE8\xBF\x99\xE7\xA7\x8D\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xEF\xBC\x8C\xE5\xAF\xB9\xE4\xB8\x8D\xE5\x90\x8C\xE7\x9A\x84\xE8\xA7\x86\xE9\xA2\x91\xE8\xAE\xBE\xE5\xA4\x87\xE5\x9C\xA8
 680\xE7\xBC\x96\xE5\x8F\xB7\xE4\xB8\x8A\xE4\xBD\xBF\xE7\x94\xA8\xE4\xB8\x8D\xE5\x90\x8C\xE7\x9A\x84\xE8\x8C\x83\xE5\x9B\xB4\xE6\x98\xAF\xE5\xBE\x88\xE6\x9C\x89\xE7\x94\xA8\xE7\x9A\x84\xE3\x80\x82\xE4\xBE\x8B\xE5\xA6\x82\xEF\xBC\x8C\xE8\xA7\x86\xE9\xA2\x91\xE6\x8D\x95\xE8\x8E\xB7\xE8\xAE\xBE\xE5\xA4\x87\xE4\xBB\x8E 0 \xE5\xBC\x80\xE5\xA7\x8B\xEF\xBC\x8C\xE8\xA7\x86\xE9\xA2\x91
 681\xE8\xBE\x93\xE5\x87\xBA\xE8\xAE\xBE\xE5\xA4\x87\xE4\xBB\x8E 16 \xE5\xBC\x80\xE5\xA7\x8B\xE3\x80\x82\xE6\x89\x80\xE4\xBB\xA5\xE4\xBD\xA0\xE5\x8F\xAF\xE4\xBB\xA5\xE4\xBD\xBF\xE7\x94\xA8\xE6\x9C\x80\xE5\x90\x8E\xE4\xB8\x80\xE4\xB8\xAA\xE5\x8F\x82\xE6\x95\xB0\xE6\x9D\xA5\xE6\x8C\x87\xE5\xAE\x9A\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE5\x8F\xB7\xE6\x9C\x80\xE5\xB0\x8F\xE5\x80\xBC\xEF\xBC\x8C
 682\xE8\x80\x8C v4l2 \xE6\xA1\x86\xE6\x9E\xB6\xE4\xBC\x9A\xE8\xAF\x95\xE5\x9B\xBE\xE9\x80\x89\xE6\x8B\xA9\xE7\xAC\xAC\xE4\xB8\x80\xE4\xB8\xAA\xE7\x9A\x84\xE7\xA9\xBA\xE9\x97\xB2\xE7\xBC\x96\xE5\x8F\xB7\xEF\xBC\x88\xE7\xAD\x89\xE4\xBA\x8E\xE6\x88\x96\xE5\xA4\xA7\xE4\xBA\x8E\xE4\xBD\xA0\xE6\x8F\x90\xE4\xBE\x9B\xE7\x9A\x84\xE7\xBC\x96\xE5\x8F\xB7\xEF\xBC\x89\xE3\x80\x82
 683\xE5\xA6\x82\xE6\x9E\x9C\xE5\xA4\xB1\xE8\xB4\xA5\xEF\xBC\x8C\xE5\x88\x99\xE5\xAE\x83\xE4\xBC\x9A\xE5\xB0\xB1\xE9\x80\x89\xE6\x8B\xA9\xE7\xAC\xAC\xE4\xB8\x80\xE4\xB8\xAA\xE7\xA9\xBA\xE9\x97\xB2\xE7\x9A\x84\xE7\xBC\x96\xE5\x8F\xB7\xE3\x80\x82
 684
 685\xE7\x94\xB1\xE4\xBA\x8E\xE8\xBF\x99\xE7\xA7\x8D\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xEF\xBC\x8C\xE4\xBD\xA0\xE4\xBC\x9A\xE5\xBF\xBD\xE7\x95\xA5\xE6\x97\xA0\xE6\xB3\x95\xE9\x80\x89\xE6\x8B\xA9\xE7\x89\xB9\xE5\xAE\x9A\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE5\x8F\xB7\xE7\x9A\x84\xE8\xAD\xA6\xE5\x91\x8A\xEF\xBC\x8C\xE5\x88\x99\xE5\x8F\xAF\xE8\xB0\x83\xE7\x94\xA8
 686video_register_device_no_warn() \xE5\x87\xBD\xE6\x95\xB0\xE9\x81\xBF\xE5\x85\x8D\xE8\xAD\xA6\xE5\x91\x8A\xE4\xBF\xA1\xE6\x81\xAF\xE7\x9A\x84\xE4\xBA\xA7\xE7\x94\x9F\xE3\x80\x82
 687
 688\xE5\x8F\xAA\xE8\xA6\x81\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE8\xA2\xAB\xE5\x88\x9B\xE5\xBB\xBA\xEF\xBC\x8C\xE4\xB8\x80\xE4\xBA\x9B\xE5\xB1\x9E\xE6\x80\xA7\xE4\xB9\x9F\xE4\xBC\x9A\xE5\x90\x8C\xE6\x97\xB6\xE5\x88\x9B\xE5\xBB\xBA\xE3\x80\x82\xE5\x9C\xA8 /sys/class/video4linux
 689\xE7\x9B\xAE\xE5\xBD\x95\xE4\xB8\xAD\xE4\xBD\xA0\xE4\xBC\x9A\xE6\x89\xBE\xE5\x88\xB0\xE8\xBF\x99\xE4\xBA\x9B\xE8\xAE\xBE\xE5\xA4\x87\xE3\x80\x82\xE4\xBE\x8B\xE5\xA6\x82\xE8\xBF\x9B\xE5\x85\xA5\xE5\x85\xB6\xE4\xB8\xAD\xE7\x9A\x84 video0 \xE7\x9B\xAE\xE5\xBD\x95\xEF\xBC\x8C\xE4\xBD\xA0\xE4\xBC\x9A\xE7\x9C\x8B\xE5\x88\xB0\xE2\x80\x98name\xE2\x80\x99\xE5\x92\x8C
 690\xE2\x80\x98index\xE2\x80\x99\xE5\xB1\x9E\xE6\x80\xA7\xE3\x80\x82\xE2\x80\x98name\xE2\x80\x99\xE5\xB1\x9E\xE6\x80\xA7\xE5\x80\xBC\xE5\xB0\xB1\xE6\x98\xAF video_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE7\x9A\x84\xE2\x80\x98name\xE2\x80\x99\xE5\x9F\x9F\xE3\x80\x82
 691
 692\xE2\x80\x98index\xE2\x80\x99\xE5\xB1\x9E\xE6\x80\xA7\xE5\x80\xBC\xE5\xB0\xB1\xE6\x98\xAF\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE7\x9A\x84\xE7\xB4\xA2\xE5\xBC\x95\xE5\x80\xBC\xEF\xBC\x9A\xE6\xAF\x8F\xE6\xAC\xA1\xE8\xB0\x83\xE7\x94\xA8 video_register_device()\xEF\xBC\x8C
 693\xE7\xB4\xA2\xE5\xBC\x95\xE5\x80\xBC\xE9\x83\xBD\xE9\x80\x92\xE5\xA2\x9E 1 \xE3\x80\x82\xE7\xAC\xAC\xE4\xB8\x80\xE4\xB8\xAA\xE8\xA7\x86\xE9\xA2\x91\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE6\x80\xBB\xE6\x98\xAF\xE4\xBB\x8E\xE7\xB4\xA2\xE5\xBC\x95\xE5\x80\xBC 0 \xE5\xBC\x80\xE5\xA7\x8B\xE3\x80\x82
 694
 695\xE7\x94\xA8\xE6\x88\xB7\xE5\x8F\xAF\xE4\xBB\xA5\xE8\xAE\xBE\xE7\xBD\xAE udev \xE8\xA7\x84\xE5\x88\x99\xEF\xBC\x8C\xE5\x88\xA9\xE7\x94\xA8\xE7\xB4\xA2\xE5\xBC\x95\xE5\xB1\x9E\xE6\x80\xA7\xE7\x94\x9F\xE6\x88\x90\xE8\x8A\xB1\xE5\x93\xA8\xE7\x9A\x84\xE8\xAE\xBE\xE5\xA4\x87\xE5\x90\x8D\xEF\xBC\x88\xE4\xBE\x8B\xE5\xA6\x82\xEF\xBC\x9A\xE7\x94\xA8\xE2\x80\x98mpegX\xE2\x80\x99
 696\xE4\xBB\xA3\xE8\xA1\xA8 MPEG \xE8\xA7\x86\xE9\xA2\x91\xE6\x8D\x95\xE8\x8E\xB7\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xEF\xBC\x89\xE3\x80\x82
 697
 698\xE5\x9C\xA8\xE8\xAE\xBE\xE5\xA4\x87\xE6\x88\x90\xE5\x8A\x9F\xE6\xB3\xA8\xE5\x86\x8C\xE5\x90\x8E\xEF\xBC\x8C\xE5\xB0\xB1\xE5\x8F\xAF\xE4\xBB\xA5\xE4\xBD\xBF\xE7\x94\xA8\xE8\xBF\x99\xE4\xBA\x9B\xE5\x9F\x9F\xEF\xBC\x9A
 699
 700- vfl_type: \xE4\xBC\xA0\xE9\x80\x92\xE7\xBB\x99 video_register_device \xE7\x9A\x84\xE8\xAE\xBE\xE5\xA4\x87\xE7\xB1\xBB\xE5\x9E\x8B\xE3\x80\x82
 701- minor: \xE5\xB7\xB2\xE6\x8C\x87\xE6\xB4\xBE\xE7\x9A\x84\xE6\xAC\xA1\xE8\xAE\xBE\xE5\xA4\x87\xE5\x8F\xB7\xE3\x80\x82
 702- num: \xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE7\xBC\x96\xE5\x8F\xB7 (\xE4\xBE\x8B\xE5\xA6\x82 videoX \xE4\xB8\xAD\xE7\x9A\x84 X)\xE3\x80\x82
 703- index: \xE8\xAE\xBE\xE5\xA4\x87\xE7\xB4\xA2\xE5\xBC\x95\xE5\x8F\xB7\xE3\x80\x82
 704
 705\xE5\xA6\x82\xE6\x9E\x9C\xE6\xB3\xA8\xE5\x86\x8C\xE5\xA4\xB1\xE8\xB4\xA5\xEF\xBC\x8C\xE4\xBD\xA0\xE5\xBF\x85\xE9\xA1\xBB\xE8\xB0\x83\xE7\x94\xA8 video_device_release() \xE6\x9D\xA5\xE9\x87\x8A\xE6\x94\xBE\xE5\xB7\xB2\xE5\x88\x86\xE9\x85\x8D\xE7\x9A\x84
 706video_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xEF\xBC\x9B\xE5\xA6\x82\xE6\x9E\x9C video_device \xE6\x98\xAF\xE5\xB5\x8C\xE5\x85\xA5\xE5\x9C\xA8\xE8\x87\xAA\xE5\xB7\xB1\xE5\x88\x9B\xE5\xBB\xBA\xE7\x9A\x84\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xEF\xBC\x8C
 707\xE4\xBD\xA0\xE4\xB9\x9F\xE5\xBF\x85\xE9\xA1\xBB\xE9\x87\x8A\xE6\x94\xBE\xE5\xAE\x83\xE3\x80\x82vdev->release() \xE5\x9B\x9E\xE8\xB0\x83\xE4\xB8\x8D\xE4\xBC\x9A\xE5\x9C\xA8\xE6\xB3\xA8\xE5\x86\x8C\xE5\xA4\xB1\xE8\xB4\xA5\xE4\xB9\x8B\xE5\x90\x8E\xE8\xA2\xAB\xE8\xB0\x83\xE7\x94\xA8\xEF\xBC\x8C
 708\xE4\xBD\xA0\xE4\xB9\x9F\xE4\xB8\x8D\xE5\xBA\x94\xE8\xAF\x95\xE5\x9B\xBE\xE5\x9C\xA8\xE6\xB3\xA8\xE5\x86\x8C\xE5\xA4\xB1\xE8\xB4\xA5\xE5\x90\x8E\xE6\xB3\xA8\xE9\x94\x80\xE8\xAE\xBE\xE5\xA4\x87\xE3\x80\x82
 709
 710
 711video_device \xE6\xB3\xA8\xE9\x94\x80
 712----------------
 713
 714\xE5\xBD\x93\xE8\xA7\x86\xE9\xA2\x91\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE5\xB7\xB2\xE8\xA2\xAB\xE7\xA7\xBB\xE9\x99\xA4\xEF\xBC\x8C\xE4\xB8\x8D\xE8\xAE\xBA\xE6\x98\xAF\xE5\x8D\xB8\xE8\xBD\xBD\xE9\xA9\xB1\xE5\x8A\xA8\xE8\xBF\x98\xE6\x98\xAFUSB\xE8\xAE\xBE\xE5\xA4\x87\xE6\x96\xAD\xE5\xBC\x80\xEF\xBC\x8C\xE4\xBD\xA0\xE9\x83\xBD\xE5\xBA\x94\xE6\xB3\xA8\xE9\x94\x80
 715\xE5\xAE\x83\xE4\xBB\xAC\xEF\xBC\x9A
 716
 717        video_unregister_device(vdev);
 718
 719\xE8\xBF\x99\xE4\xB8\xAA\xE6\x93\x8D\xE4\xBD\x9C\xE5\xB0\x86\xE4\xBB\x8E sysfs \xE4\xB8\xAD\xE7\xA7\xBB\xE9\x99\xA4\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xEF\xBC\x88\xE5\xAF\xBC\xE8\x87\xB4 udev \xE5\xB0\x86\xE5\x85\xB6\xE4\xBB\x8E /dev \xE4\xB8\xAD\xE7\xA7\xBB\xE9\x99\xA4\xEF\xBC\x89\xE3\x80\x82
 720
 721video_unregister_device() \xE8\xBF\x94\xE5\x9B\x9E\xE4\xB9\x8B\xE5\x90\x8E\xEF\xBC\x8C\xE5\xB0\xB1\xE6\x97\xA0\xE6\xB3\x95\xE5\xAE\x8C\xE6\x88\x90\xE6\x89\x93\xE5\xBC\x80\xE6\x93\x8D\xE4\xBD\x9C\xE3\x80\x82\xE5\xB0\xBD\xE7\xAE\xA1\xE5\xA6\x82\xE6\xAD\xA4\xEF\xBC\x8C
 722USB \xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84\xE6\x83\x85\xE5\x86\xB5\xE5\x88\x99\xE4\xB8\x8D\xE5\x90\x8C\xEF\xBC\x8C\xE6\x9F\x90\xE4\xBA\x9B\xE5\xBA\x94\xE7\x94\xA8\xE7\xA8\x8B\xE5\xBA\x8F\xE5\x8F\xAF\xE8\x83\xBD\xE4\xBE\x9D\xE7\x84\xB6\xE6\x89\x93\xE5\xBC\x80\xE7\x9D\x80\xE5\x85\xB6\xE4\xB8\xAD\xE4\xB8\x80\xE4\xB8\xAA\xE5\xB7\xB2\xE6\xB3\xA8\xE9\x94\x80\xE8\xAE\xBE\xE5\xA4\x87
 723\xE8\x8A\x82\xE7\x82\xB9\xE3\x80\x82\xE6\x89\x80\xE4\xBB\xA5\xE5\x9C\xA8\xE6\xB3\xA8\xE9\x94\x80\xE4\xB9\x8B\xE5\x90\x8E\xEF\xBC\x8C\xE6\x89\x80\xE6\x9C\x89\xE6\x96\x87\xE4\xBB\xB6\xE6\x93\x8D\xE4\xBD\x9C\xEF\xBC\x88\xE5\xBD\x93\xE7\x84\xB6\xE9\x99\xA4\xE4\xBA\x86 release \xEF\xBC\x89\xE4\xB9\x9F\xE5\xBA\x94\xE8\xBF\x94\xE5\x9B\x9E\xE9\x94\x99\xE8\xAF\xAF\xE5\x80\xBC\xE3\x80\x82
 724
 725\xE5\xBD\x93\xE6\x9C\x80\xE5\x90\x8E\xE4\xB8\x80\xE4\xB8\xAA\xE8\xA7\x86\xE9\xA2\x91\xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE7\x9A\x84\xE7\x94\xA8\xE6\x88\xB7\xE9\x80\x80\xE5\x87\xBA\xEF\xBC\x8C\xE5\x88\x99 vdev->release() \xE5\x9B\x9E\xE8\xB0\x83\xE4\xBC\x9A\xE8\xA2\xAB\xE8\xB0\x83\xE7\x94\xA8\xEF\xBC\x8C
 726\xE5\xB9\xB6\xE4\xB8\x94\xE4\xBD\xA0\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x81\x9A\xE6\x9C\x80\xE5\x90\x8E\xE7\x9A\x84\xE6\xB8\x85\xE7\x90\x86\xE6\x93\x8D\xE4\xBD\x9C\xE3\x80\x82
 727
 728\xE4\xB8\x8D\xE8\xA6\x81\xE5\xBF\x98\xE8\xAE\xB0\xE6\xB8\x85\xE7\x90\x86\xE4\xB8\x8E\xE8\xA7\x86\xE9\xA2\x91\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9B\xB8\xE5\x85\xB3\xE7\x9A\x84\xE5\xAA\x92\xE4\xBD\x93\xE5\x85\xA5\xE5\x8F\xA3\xEF\xBC\x88\xE5\xA6\x82\xE6\x9E\x9C\xE8\xA2\xAB\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96\xE8\xBF\x87\xEF\xBC\x89\xEF\xBC\x9A
 729
 730        media_entity_cleanup(&vdev->entity);
 731
 732\xE8\xBF\x99\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x9C\xA8 release \xE5\x9B\x9E\xE8\xB0\x83\xE4\xB8\xAD\xE5\xAE\x8C\xE6\x88\x90\xE3\x80\x82
 733
 734
 735video_device \xE8\xBE\x85\xE5\x8A\xA9\xE5\x87\xBD\xE6\x95\xB0
 736---------------------
 737
 738\xE4\xB8\x80\xE4\xBA\x9B\xE6\x9C\x89\xE7\x94\xA8\xE7\x9A\x84\xE8\xBE\x85\xE5\x8A\xA9\xE5\x87\xBD\xE6\x95\xB0\xE5\xA6\x82\xE4\xB8\x8B\xEF\xBC\x9A
 739
 740- file/video_device \xE7\xA7\x81\xE6\x9C\x89\xE6\x95\xB0\xE6\x8D\xAE
 741
 742\xE4\xBD\xA0\xE5\x8F\xAF\xE4\xBB\xA5\xE7\x94\xA8\xE4\xBB\xA5\xE4\xB8\x8B\xE5\x87\xBD\xE6\x95\xB0\xE5\x9C\xA8 video_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE8\xAE\xBE\xE7\xBD\xAE/\xE8\x8E\xB7\xE5\x8F\x96\xE9\xA9\xB1\xE5\x8A\xA8\xE7\xA7\x81\xE6\x9C\x89\xE6\x95\xB0\xE6\x8D\xAE\xEF\xBC\x9A
 743
 744void *video_get_drvdata(struct video_device *vdev);
 745void video_set_drvdata(struct video_device *vdev, void *data);
 746
 747\xE6\xB3\xA8\xE6\x84\x8F\xEF\xBC\x9A\xE5\x9C\xA8\xE8\xB0\x83\xE7\x94\xA8 video_register_device() \xE5\x89\x8D\xE6\x89\xA7\xE8\xA1\x8C video_set_drvdata()
 748\xE6\x98\xAF\xE5\xAE\x89\xE5\x85\xA8\xE7\x9A\x84\xE3\x80\x82
 749
 750\xE8\x80\x8C\xE4\xBB\xA5\xE4\xB8\x8B\xE5\x87\xBD\xE6\x95\xB0\xEF\xBC\x9A
 751
 752struct video_device *video_devdata(struct file *file);
 753
 754\xE8\xBF\x94\xE5\x9B\x9E file \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE6\x8B\xA5\xE6\x9C\x89\xE7\x9A\x84\xE7\x9A\x84 video_device \xE6\x8C\x87\xE9\x92\x88\xE3\x80\x82
 755
 756video_drvdata \xE8\xBE\x85\xE5\x8A\xA9\xE5\x87\xBD\xE6\x95\xB0\xE7\xBB\x93\xE5\x90\x88\xE4\xBA\x86 video_get_drvdata \xE5\x92\x8C video_devdata
 757\xE7\x9A\x84\xE5\x8A\x9F\xE8\x83\xBD\xEF\xBC\x9A
 758
 759void *video_drvdata(struct file *file);
 760
 761\xE4\xBD\xA0\xE5\x8F\xAF\xE4\xBB\xA5\xE4\xBD\xBF\xE7\x94\xA8\xE5\xA6\x82\xE4\xB8\x8B\xE4\xBB\xA3\xE7\xA0\x81\xE4\xBB\x8E video_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE8\x8E\xB7\xE5\x8F\x96 v4l2_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93
 762\xE6\x8C\x87\xE9\x92\x88\xEF\xBC\x9A
 763
 764struct v4l2_device *v4l2_dev = vdev->v4l2_dev;
 765
 766- \xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE5\x90\x8D
 767
 768video_device \xE8\xAE\xBE\xE5\xA4\x87\xE8\x8A\x82\xE7\x82\xB9\xE5\x9C\xA8\xE5\x86\x85\xE6\xA0\xB8\xE4\xB8\xAD\xE7\x9A\x84\xE5\x90\x8D\xE7\xA7\xB0\xE5\x8F\xAF\xE4\xBB\xA5\xE9\x80\x9A\xE8\xBF\x87\xE4\xBB\xA5\xE4\xB8\x8B\xE5\x87\xBD\xE6\x95\xB0\xE8\x8E\xB7\xE5\xBE\x97
 769
 770const char *video_device_node_name(struct video_device *vdev);
 771
 772\xE8\xBF\x99\xE4\xB8\xAA\xE5\x90\x8D\xE5\xAD\x97\xE8\xA2\xAB\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE5\xB7\xA5\xE5\x85\xB7\xEF\xBC\x88\xE4\xBE\x8B\xE5\xA6\x82 udev\xEF\xBC\x89\xE4\xBD\x9C\xE4\xB8\xBA\xE6\x8F\x90\xE7\xA4\xBA\xE4\xBF\xA1\xE6\x81\xAF\xE4\xBD\xBF\xE7\x94\xA8\xE3\x80\x82\xE5\xBA\x94\xE5\xB0\xBD\xE5\x8F\xAF\xE8\x83\xBD\xE4\xBD\xBF\xE7\x94\xA8
 773\xE6\xAD\xA4\xE5\x8A\x9F\xE8\x83\xBD\xEF\xBC\x8C\xE8\x80\x8C\xE9\x9D\x9E\xE8\xAE\xBF\xE9\x97\xAE video_device::num \xE5\x92\x8C video_device::minor \xE5\x9F\x9F\xE3\x80\x82
 774
 775
 776\xE8\xA7\x86\xE9\xA2\x91\xE7\xBC\x93\xE5\x86\xB2\xE8\xBE\x85\xE5\x8A\xA9\xE5\x87\xBD\xE6\x95\xB0
 777---------------
 778
 779v4l2 \xE6\xA0\xB8\xE5\xBF\x83 API \xE6\x8F\x90\xE4\xBE\x9B\xE4\xBA\x86\xE4\xB8\x80\xE4\xB8\xAA\xE5\xA4\x84\xE7\x90\x86\xE8\xA7\x86\xE9\xA2\x91\xE7\xBC\x93\xE5\x86\xB2\xE7\x9A\x84\xE6\xA0\x87\xE5\x87\x86\xE6\x96\xB9\xE6\xB3\x95(\xE7\xA7\xB0\xE4\xB8\xBA\xE2\x80\x9Cvideobuf\xE2\x80\x9D)\xE3\x80\x82
 780\xE8\xBF\x99\xE4\xBA\x9B\xE6\x96\xB9\xE6\xB3\x95\xE4\xBD\xBF\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x8F\xAF\xE4\xBB\xA5\xE9\x80\x9A\xE8\xBF\x87\xE7\xBB\x9F\xE4\xB8\x80\xE7\x9A\x84\xE6\x96\xB9\xE5\xBC\x8F\xE5\xAE\x9E\xE7\x8E\xB0 read()\xE3\x80\x81mmap() \xE5\x92\x8C overlay()\xE3\x80\x82
 781\xE7\x9B\xAE\xE5\x89\x8D\xE5\x9C\xA8\xE8\xAE\xBE\xE5\xA4\x87\xE4\xB8\x8A\xE6\x94\xAF\xE6\x8C\x81\xE8\xA7\x86\xE9\xA2\x91\xE7\xBC\x93\xE5\x86\xB2\xE7\x9A\x84\xE6\x96\xB9\xE6\xB3\x95\xE6\x9C\x89\xE5\x88\x86\xE6\x95\xA3/\xE8\x81\x9A\xE9\x9B\x86 DMA(videobuf-dma-sg)\xE3\x80\x81
 782\xE7\xBA\xBF\xE6\x80\xA7 DMA(videobuf-dma-contig)\xE4\xBB\xA5\xE5\x8F\x8A\xE5\xA4\xA7\xE5\xA4\x9A\xE7\x94\xA8\xE4\xBA\x8E USB \xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84\xE7\x94\xA8 vmalloc
 783\xE5\x88\x86\xE9\x85\x8D\xE7\x9A\x84\xE7\xBC\x93\xE5\x86\xB2(videobuf-vmalloc)\xE3\x80\x82
 784
 785\xE8\xAF\xB7\xE5\x8F\x82\xE9\x98\x85 Documentation/video4linux/videobuf\xEF\xBC\x8C\xE4\xBB\xA5\xE8\x8E\xB7\xE5\xBE\x97\xE6\x9B\xB4\xE5\xA4\x9A\xE5\x85\xB3\xE4\xBA\x8E videobuf
 786\xE5\xB1\x82\xE7\x9A\x84\xE4\xBD\xBF\xE7\x94\xA8\xE4\xBF\xA1\xE6\x81\xAF\xE3\x80\x82
 787
 788v4l2_fh \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93
 789-------------
 790
 791v4l2_fh \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE6\x8F\x90\xE4\xBE\x9B\xE4\xB8\x80\xE4\xB8\xAA\xE4\xBF\x9D\xE5\xAD\x98\xE7\x94\xA8\xE4\xBA\x8E V4L2 \xE6\xA1\x86\xE6\x9E\xB6\xE7\x9A\x84\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xE7\x89\xB9\xE5\xAE\x9A\xE6\x95\xB0\xE6\x8D\xAE\xE7\x9A\x84\xE7\xAE\x80\xE5\x8D\x95\xE6\x96\xB9\xE6\xB3\x95\xE3\x80\x82
 792\xE5\xA6\x82\xE6\x9E\x9C video_device \xE7\x9A\x84 flag \xE8\xAE\xBE\xE7\xBD\xAE\xE4\xBA\x86 V4L2_FL_USE_FH_PRIO \xE6\xA0\x87\xE5\xBF\x97\xEF\xBC\x8C\xE6\x96\xB0\xE9\xA9\xB1\xE5\x8A\xA8
 793\xE5\xBF\x85\xE9\xA1\xBB\xE4\xBD\xBF\xE7\x94\xA8 v4l2_fh \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xEF\xBC\x8C\xE5\x9B\xA0\xE4\xB8\xBA\xE5\xAE\x83\xE4\xB9\x9F\xE7\x94\xA8\xE4\xBA\x8E\xE5\xAE\x9E\xE7\x8E\xB0\xE4\xBC\x98\xE5\x85\x88\xE7\xBA\xA7\xE5\xA4\x84\xE7\x90\x86\xEF\xBC\x88VIDIOC_G/S_PRIORITY\xEF\xBC\x89\xE3\x80\x82
 794
 795v4l2_fh \xE7\x9A\x84\xE7\x94\xA8\xE6\x88\xB7\xEF\xBC\x88\xE4\xBD\x8D\xE4\xBA\x8E V4l2 \xE6\xA1\x86\xE6\x9E\xB6\xE4\xB8\xAD\xEF\xBC\x8C\xE5\xB9\xB6\xE9\x9D\x9E\xE9\xA9\xB1\xE5\x8A\xA8\xEF\xBC\x89\xE5\x8F\xAF\xE9\x80\x9A\xE8\xBF\x87\xE6\xB5\x8B\xE8\xAF\x95
 796video_device->flags \xE4\xB8\xAD\xE7\x9A\x84 V4L2_FL_USES_V4L2_FH \xE4\xBD\x8D\xE5\xBE\x97\xE7\x9F\xA5\xE9\xA9\xB1\xE5\x8A\xA8\xE6\x98\xAF\xE5\x90\xA6\xE4\xBD\xBF\xE7\x94\xA8
 797v4l2_fh \xE4\xBD\x9C\xE4\xB8\xBA\xE4\xBB\x96\xE7\x9A\x84 file->private_data \xE6\x8C\x87\xE9\x92\x88\xE3\x80\x82\xE8\xBF\x99\xE4\xB8\xAA\xE4\xBD\x8D\xE4\xBC\x9A\xE5\x9C\xA8\xE8\xB0\x83\xE7\x94\xA8 v4l2_fh_init()
 798\xE6\x97\xB6\xE8\xA2\xAB\xE8\xAE\xBE\xE7\xBD\xAE\xE3\x80\x82
 799
 800v4l2_fh \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xBD\x9C\xE4\xB8\xBA\xE9\xA9\xB1\xE5\x8A\xA8\xE8\x87\xAA\xE8\xBA\xAB\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE7\x9A\x84\xE4\xB8\x80\xE9\x83\xA8\xE5\x88\x86\xE8\xA2\xAB\xE5\x88\x86\xE9\x85\x8D\xEF\xBC\x8C\xE4\xB8\x94\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x9C\xA8
 801\xE5\x85\xB6\xE6\x89\x93\xE5\xBC\x80\xE5\x87\xBD\xE6\x95\xB0\xE4\xB8\xAD\xE5\xB0\x86 file->private_data \xE6\x8C\x87\xE5\x90\x91\xE5\xAE\x83\xE3\x80\x82
 802
 803\xE5\x9C\xA8\xE8\xAE\xB8\xE5\xA4\x9A\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xEF\xBC\x8Cv4l2_fh \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xBC\x9A\xE5\xB5\x8C\xE5\x85\xA5\xE5\x88\xB0\xE4\xB8\x80\xE4\xB8\xAA\xE6\x9B\xB4\xE5\xA4\xA7\xE7\x9A\x84\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE3\x80\x82\xE8\xBF\x99\xE9\x92\x9F\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xEF\xBC\x8C
 804\xE5\xBA\x94\xE8\xAF\xA5\xE5\x9C\xA8 open() \xE4\xB8\xAD\xE8\xB0\x83\xE7\x94\xA8 v4l2_fh_init+v4l2_fh_add\xEF\xBC\x8C\xE5\xB9\xB6\xE5\x9C\xA8 release() \xE4\xB8\xAD
 805\xE8\xB0\x83\xE7\x94\xA8 v4l2_fh_del+v4l2_fh_exit\xE3\x80\x82
 806
 807\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x8F\xAF\xE4\xBB\xA5\xE9\x80\x9A\xE8\xBF\x87\xE4\xBD\xBF\xE7\x94\xA8 container_of \xE5\xAE\x8F\xE6\x8F\x90\xE5\x8F\x96\xE4\xBB\x96\xE4\xBB\xAC\xE8\x87\xAA\xE5\xB7\xB1\xE7\x9A\x84\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE3\x80\x82\xE4\xBE\x8B\xE5\xA6\x82\xEF\xBC\x9A
 808
 809struct my_fh {
 810        int blah;
 811        struct v4l2_fh fh;
 812};
 813
 814...
 815
 816int my_open(struct file *file)
 817{
 818        struct my_fh *my_fh;
 819        struct video_device *vfd;
 820        int ret;
 821
 822        ...
 823
 824        my_fh = kzalloc(sizeof(*my_fh), GFP_KERNEL);
 825
 826        ...
 827
 828        v4l2_fh_init(&my_fh->fh, vfd);
 829
 830        ...
 831
 832        file->private_data = &my_fh->fh;
 833        v4l2_fh_add(&my_fh->fh);
 834        return 0;
 835}
 836
 837int my_release(struct file *file)
 838{
 839        struct v4l2_fh *fh = file->private_data;
 840        struct my_fh *my_fh = container_of(fh, struct my_fh, fh);
 841
 842        ...
 843        v4l2_fh_del(&my_fh->fh);
 844        v4l2_fh_exit(&my_fh->fh);
 845        kfree(my_fh);
 846        return 0;
 847}
 848
 849\xE4\xBB\xA5\xE4\xB8\x8B\xE6\x98\xAF v4l2_fh \xE5\x87\xBD\xE6\x95\xB0\xE4\xBD\xBF\xE7\x94\xA8\xE7\x9A\x84\xE7\xAE\x80\xE4\xBB\x8B\xEF\xBC\x9A
 850
 851void v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev)
 852
 853  \xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xE3\x80\x82\xE8\xBF\x99*\xE5\xBF\x85\xE9\xA1\xBB*\xE5\x9C\xA8\xE9\xA9\xB1\xE5\x8A\xA8\xE7\x9A\x84 v4l2_file_operations->open()
 854  \xE5\x87\xBD\xE6\x95\xB0\xE4\xB8\xAD\xE6\x89\xA7\xE8\xA1\x8C\xE3\x80\x82
 855
 856void v4l2_fh_add(struct v4l2_fh *fh)
 857
 858  \xE6\xB7\xBB\xE5\x8A\xA0\xE4\xB8\x80\xE4\xB8\xAA v4l2_fh \xE5\x88\xB0 video_device \xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xE5\x88\x97\xE8\xA1\xA8\xE3\x80\x82\xE4\xB8\x80\xE6\x97\xA6\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84
 859  \xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96\xE5\xAE\x8C\xE6\x88\x90\xE5\xB0\xB1\xE5\xBF\x85\xE9\xA1\xBB\xE8\xB0\x83\xE7\x94\xA8\xE3\x80\x82
 860
 861void v4l2_fh_del(struct v4l2_fh *fh)
 862
 863  \xE4\xBB\x8E video_device() \xE4\xB8\xAD\xE8\xA7\xA3\xE9\x99\xA4\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xE7\x9A\x84\xE5\x85\xB3\xE8\x81\x94\xE3\x80\x82\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xE7\x9A\x84\xE9\x80\x80\xE5\x87\xBA\xE5\x87\xBD\xE6\x95\xB0\xE4\xB9\x9F
 864  \xE5\xB0\x86\xE8\xA2\xAB\xE8\xB0\x83\xE7\x94\xA8\xE3\x80\x82
 865
 866void v4l2_fh_exit(struct v4l2_fh *fh)
 867
 868  \xE6\xB8\x85\xE7\x90\x86\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xE3\x80\x82\xE5\x9C\xA8\xE6\xB8\x85\xE7\x90\x86\xE5\xAE\x8C v4l2_fh \xE5\x90\x8E\xEF\xBC\x8C\xE7\x9B\xB8\xE5\x85\xB3\xE5\x86\x85\xE5\xAD\x98\xE4\xBC\x9A\xE8\xA2\xAB\xE9\x87\x8A\xE6\x94\xBE\xE3\x80\x82
 869
 870
 871\xE5\xA6\x82\xE6\x9E\x9C v4l2_fh \xE4\xB8\x8D\xE6\x98\xAF\xE5\xB5\x8C\xE5\x85\xA5\xE5\x9C\xA8\xE5\x85\xB6\xE4\xBB\x96\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE7\x9A\x84\xEF\xBC\x8C\xE5\x88\x99\xE5\x8F\xAF\xE4\xBB\xA5\xE7\x94\xA8\xE8\xBF\x99\xE4\xBA\x9B\xE8\xBE\x85\xE5\x8A\xA9\xE5\x87\xBD\xE6\x95\xB0\xEF\xBC\x9A
 872
 873int v4l2_fh_open(struct file *filp)
 874
 875  \xE5\x88\x86\xE9\x85\x8D\xE4\xB8\x80\xE4\xB8\xAA v4l2_fh \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE7\xA9\xBA\xE9\x97\xB4\xEF\xBC\x8C\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96\xE5\xB9\xB6\xE5\xB0\x86\xE5\x85\xB6\xE6\xB7\xBB\xE5\x8A\xA0\xE5\x88\xB0 file \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE7\x9B\xB8\xE5\x85\xB3\xE7\x9A\x84
 876  video_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE3\x80\x82
 877
 878int v4l2_fh_release(struct file *filp)
 879
 880  \xE4\xBB\x8E file \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE7\x9B\xB8\xE5\x85\xB3\xE7\x9A\x84 video_device \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE5\x88\xA0\xE9\x99\xA4 v4l2_fh \xEF\xBC\x8C\xE6\xB8\x85\xE7\x90\x86
 881  v4l2_fh \xE5\xB9\xB6\xE9\x87\x8A\xE6\x94\xBE\xE7\xA9\xBA\xE9\x97\xB4\xE3\x80\x82
 882
 883\xE8\xBF\x99\xE4\xB8\xA4\xE4\xB8\xAA\xE5\x87\xBD\xE6\x95\xB0\xE5\x8F\xAF\xE4\xBB\xA5\xE6\x8F\x92\xE5\x85\xA5\xE5\x88\xB0 v4l2_file_operation \xE7\x9A\x84 open() \xE5\x92\x8C release()
 884\xE6\x93\x8D\xE4\xBD\x9C\xE4\xB8\xAD\xE3\x80\x82
 885
 886
 887\xE6\x9F\x90\xE4\xBA\x9B\xE9\xA9\xB1\xE5\x8A\xA8\xE9\x9C\x80\xE8\xA6\x81\xE5\x9C\xA8\xE7\xAC\xAC\xE4\xB8\x80\xE4\xB8\xAA\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xE6\x89\x93\xE5\xBC\x80\xE5\x92\x8C\xE6\x9C\x80\xE5\x90\x8E\xE4\xB8\x80\xE4\xB8\xAA\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xE5\x85\xB3\xE9\x97\xAD\xE7\x9A\x84\xE6\x97\xB6\xE5\x80\x99\xE5\x81\x9A\xE4\xBA\x9B
 888\xE5\xB7\xA5\xE4\xBD\x9C\xE3\x80\x82\xE6\x89\x80\xE4\xBB\xA5\xE5\x8A\xA0\xE5\x85\xA5\xE4\xBA\x86\xE4\xB8\xA4\xE4\xB8\xAA\xE8\xBE\x85\xE5\x8A\xA9\xE5\x87\xBD\xE6\x95\xB0\xE4\xBB\xA5\xE6\xA3\x80\xE6\x9F\xA5 v4l2_fh \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE6\x98\xAF\xE5\x90\xA6\xE6\x98\xAF\xE7\x9B\xB8\xE5\x85\xB3\xE8\xAE\xBE\xE5\xA4\x87
 889\xE8\x8A\x82\xE7\x82\xB9\xE6\x89\x93\xE5\xBC\x80\xE7\x9A\x84\xE5\x94\xAF\xE4\xB8\x80\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xE3\x80\x82
 890
 891int v4l2_fh_is_singular(struct v4l2_fh *fh)
 892
 893  \xE5\xA6\x82\xE6\x9E\x9C\xE6\xAD\xA4\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xE6\x98\xAF\xE5\x94\xAF\xE4\xB8\x80\xE6\x89\x93\xE5\xBC\x80\xE7\x9A\x84\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xA5\xE6\x9F\x84\xEF\xBC\x8C\xE5\x88\x99\xE8\xBF\x94\xE5\x9B\x9E 1 \xEF\xBC\x8C\xE5\x90\xA6\xE5\x88\x99\xE8\xBF\x94\xE5\x9B\x9E 0 \xE3\x80\x82
 894
 895int v4l2_fh_is_singular_file(struct file *filp)
 896
 897  \xE5\x8A\x9F\xE8\x83\xBD\xE7\x9B\xB8\xE5\x90\x8C\xEF\xBC\x8C\xE4\xBD\x86\xE9\x80\x9A\xE8\xBF\x87 filp->private_data \xE8\xB0\x83\xE7\x94\xA8 v4l2_fh_is_singular\xE3\x80\x82
 898
 899
 900V4L2 \xE4\xBA\x8B\xE4\xBB\xB6\xE6\x9C\xBA\xE5\x88\xB6
 901-----------
 902
 903V4L2 \xE4\xBA\x8B\xE4\xBB\xB6\xE6\x9C\xBA\xE5\x88\xB6\xE6\x8F\x90\xE4\xBE\x9B\xE4\xBA\x86\xE4\xB8\x80\xE4\xB8\xAA\xE9\x80\x9A\xE7\x94\xA8\xE7\x9A\x84\xE6\x96\xB9\xE6\xB3\x95\xE5\xB0\x86\xE4\xBA\x8B\xE4\xBB\xB6\xE4\xBC\xA0\xE9\x80\x92\xE5\x88\xB0\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE3\x80\x82\xE9\xA9\xB1\xE5\x8A\xA8\xE5\xBF\x85\xE9\xA1\xBB\xE4\xBD\xBF\xE7\x94\xA8
 904v4l2_fh \xE6\x89\x8D\xE8\x83\xBD\xE6\x94\xAF\xE6\x8C\x81 V4L2 \xE4\xBA\x8B\xE4\xBB\xB6\xE6\x9C\xBA\xE5\x88\xB6\xE3\x80\x82
 905
 906
 907\xE4\xBA\x8B\xE4\xBB\xB6\xE9\x80\x9A\xE8\xBF\x87\xE4\xB8\x80\xE4\xB8\xAA\xE7\xB1\xBB\xE5\x9E\x8B\xE5\x92\x8C\xE9\x80\x89\xE6\x8B\xA9 ID \xE6\x9D\xA5\xE5\xAE\x9A\xE4\xB9\x89\xE3\x80\x82ID \xE5\xAF\xB9\xE5\xBA\x94\xE4\xB8\x80\xE4\xB8\xAA V4L2 \xE5\xAF\xB9\xE8\xB1\xA1\xEF\xBC\x8C\xE4\xBE\x8B\xE5\xA6\x82
 908\xE4\xB8\x80\xE4\xB8\xAA\xE6\x8E\xA7\xE5\x88\xB6 ID\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE6\x9C\xAA\xE4\xBD\xBF\xE7\x94\xA8\xEF\xBC\x8C\xE5\x88\x99 ID \xE4\xB8\xBA 0\xE3\x80\x82
 909
 910\xE5\xBD\x93\xE7\x94\xA8\xE6\x88\xB7\xE8\xAE\xA2\xE9\x98\x85\xE4\xB8\x80\xE4\xB8\xAA\xE4\xBA\x8B\xE4\xBB\xB6\xEF\xBC\x8C\xE9\xA9\xB1\xE5\x8A\xA8\xE4\xBC\x9A\xE4\xB8\xBA\xE6\xAD\xA4\xE5\x88\x86\xE9\x85\x8D\xE4\xB8\x80\xE4\xBA\x9B kevent \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE3\x80\x82\xE6\x89\x80\xE4\xBB\xA5\xE6\xAF\x8F\xE4\xB8\xAA
 911\xE4\xBA\x8B\xE4\xBB\xB6\xE7\xBB\x84\xEF\xBC\x88\xE7\xB1\xBB\xE5\x9E\x8B\xE3\x80\x81ID\xEF\xBC\x89\xE9\x83\xBD\xE4\xBC\x9A\xE6\x9C\x89\xE8\x87\xAA\xE5\xB7\xB1\xE7\x9A\x84\xE4\xB8\x80\xE5\xA5\x97 kevent \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE3\x80\x82\xE8\xBF\x99\xE4\xBF\x9D\xE8\xAF\x81\xE4\xBA\x86\xE5\xA6\x82\xE6\x9E\x9C
 912\xE4\xB8\x80\xE4\xB8\xAA\xE9\xA9\xB1\xE5\x8A\xA8\xE7\x9F\xAD\xE6\x97\xB6\xE9\x97\xB4\xE5\x86\x85\xE4\xBA\xA7\xE7\x94\x9F\xE4\xBA\x86\xE8\xAE\xB8\xE5\xA4\x9A\xE5\x90\x8C\xE7\xB1\xBB\xE4\xBA\x8B\xE4\xBB\xB6\xEF\xBC\x8C\xE4\xB8\x8D\xE4\xBC\x9A\xE8\xA6\x86\xE7\x9B\x96\xE5\x85\xB6\xE4\xBB\x96\xE7\xB1\xBB\xE5\x9E\x8B\xE7\x9A\x84\xE4\xBA\x8B\xE4\xBB\xB6\xE3\x80\x82
 913
 914\xE4\xBD\x86\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE6\x94\xB6\xE5\x88\xB0\xE7\x9A\x84\xE4\xBA\x8B\xE4\xBB\xB6\xE6\x95\xB0\xE9\x87\x8F\xE5\xA4\xA7\xE4\xBA\x8E\xE5\x90\x8C\xE7\xB1\xBB\xE4\xBA\x8B\xE4\xBB\xB6 kevent \xE7\x9A\x84\xE4\xBF\x9D\xE5\xAD\x98\xE6\x95\xB0\xE9\x87\x8F\xEF\xBC\x8C\xE5\x88\x99\xE6\x9C\x80\xE6\x97\xA9\xE7\x9A\x84
 915\xE4\xBA\x8B\xE4\xBB\xB6\xE5\xB0\x86\xE8\xA2\xAB\xE4\xB8\xA2\xE5\xBC\x83\xEF\xBC\x8C\xE5\xB9\xB6\xE5\x8A\xA0\xE5\x85\xA5\xE6\x96\xB0\xE4\xBA\x8B\xE4\xBB\xB6\xE3\x80\x82
 916
 917\xE6\xAD\xA4\xE5\xA4\x96\xEF\xBC\x8Cv4l2_subscribed_event \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE5\x86\x85\xE9\x83\xA8\xE6\x9C\x89\xE5\x8F\xAF\xE4\xBE\x9B\xE9\xA9\xB1\xE5\x8A\xA8\xE8\xAE\xBE\xE7\xBD\xAE\xE7\x9A\x84 merge() \xE5\x92\x8C
 918replace() \xE5\x9B\x9E\xE8\xB0\x83\xEF\xBC\x8C\xE8\xBF\x99\xE4\xBA\x9B\xE5\x9B\x9E\xE8\xB0\x83\xE4\xBC\x9A\xE5\x9C\xA8\xE6\x96\xB0\xE4\xBA\x8B\xE4\xBB\xB6\xE4\xBA\xA7\xE7\x94\x9F\xE4\xB8\x94\xE6\xB2\xA1\xE6\x9C\x89\xE5\xA4\x9A\xE4\xBD\x99\xE7\xA9\xBA\xE9\x97\xB4\xE7\x9A\x84\xE6\x97\xB6\xE5\x80\x99\xE8\xA2\xAB\xE8\xB0\x83\xE7\x94\xA8\xE3\x80\x82
 919replace() \xE5\x9B\x9E\xE8\xB0\x83\xE8\xAE\xA9\xE4\xBD\xA0\xE5\x8F\xAF\xE4\xBB\xA5\xE5\xB0\x86\xE6\x97\xA9\xE6\x9C\x9F\xE4\xBA\x8B\xE4\xBB\xB6\xE7\x9A\x84\xE5\x87\x80\xE8\x8D\xB7\xE6\x9B\xBF\xE6\x8D\xA2\xE4\xB8\xBA\xE6\x96\xB0\xE4\xBA\x8B\xE4\xBB\xB6\xE7\x9A\x84\xE5\x87\x80\xE8\x8D\xB7\xEF\xBC\x8C\xE5\xB0\x86\xE6\x97\xA9\xE6\x9C\x9F
 920\xE5\x87\x80\xE8\x8D\xB7\xE7\x9A\x84\xE7\x9B\xB8\xE5\x85\xB3\xE6\x95\xB0\xE6\x8D\xAE\xE5\x90\x88\xE5\xB9\xB6\xE5\x88\xB0\xE6\x9B\xBF\xE6\x8D\xA2\xE8\xBF\x9B\xE6\x9D\xA5\xE7\x9A\x84\xE6\x96\xB0\xE5\x87\x80\xE8\x8D\xB7\xE4\xB8\xAD\xE3\x80\x82\xE5\xBD\x93\xE8\xAF\xA5\xE7\xB1\xBB\xE5\x9E\x8B\xE7\x9A\x84\xE4\xBA\x8B\xE4\xBB\xB6\xE4\xBB\x85\xE5\x88\x86\xE9\x85\x8D\xE4\xBA\x86\xE4\xB8\x80\xE4\xB8\xAA
 921kevent \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE6\x97\xB6\xEF\xBC\x8C\xE5\xAE\x83\xE5\xB0\x86\xE8\xA2\xAB\xE8\xB0\x83\xE7\x94\xA8\xE3\x80\x82merge() \xE5\x9B\x9E\xE8\xB0\x83\xE8\xAE\xA9\xE4\xBD\xA0\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x90\x88\xE5\xB9\xB6\xE6\x9C\x80\xE6\x97\xA9\xE7\x9A\x84\xE4\xBA\x8B\xE4\xBB\xB6\xE5\x87\x80\xE8\x8D\xB7
 922\xE5\x88\xB0\xE5\x9C\xA8\xE5\xAE\x83\xE4\xB9\x8B\xE5\x90\x8E\xE7\x9A\x84\xE9\x82\xA3\xE4\xB8\xAA\xE4\xBA\x8B\xE4\xBB\xB6\xE5\x87\x80\xE8\x8D\xB7\xE4\xB8\xAD\xE3\x80\x82\xE5\xBD\x93\xE8\xAF\xA5\xE7\xB1\xBB\xE5\x9E\x8B\xE7\x9A\x84\xE4\xBA\x8B\xE4\xBB\xB6\xE5\x88\x86\xE9\x85\x8D\xE4\xBA\x86\xE4\xB8\xA4\xE4\xB8\xAA\xE6\x88\x96\xE6\x9B\xB4\xE5\xA4\x9A kevent
 923\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE6\x97\xB6\xEF\xBC\x8C\xE5\xAE\x83\xE5\xB0\x86\xE8\xA2\xAB\xE8\xB0\x83\xE7\x94\xA8\xE3\x80\x82
 924
 925\xE8\xBF\x99\xE7\xA7\x8D\xE6\x96\xB9\xE6\xB3\x95\xE4\xB8\x8D\xE4\xBC\x9A\xE6\x9C\x89\xE7\x8A\xB6\xE6\x80\x81\xE4\xBF\xA1\xE6\x81\xAF\xE4\xB8\xA2\xE5\xA4\xB1\xEF\xBC\x8C\xE5\x8F\xAA\xE4\xBC\x9A\xE5\xAF\xBC\xE8\x87\xB4\xE4\xB8\xAD\xE9\x97\xB4\xE6\xAD\xA5\xE9\xAA\xA4\xE4\xBF\xA1\xE6\x81\xAF\xE4\xB8\xA2\xE5\xA4\xB1\xE3\x80\x82
 926
 927
 928\xE5\x85\xB3\xE4\xBA\x8E replace/merge \xE5\x9B\x9E\xE8\xB0\x83\xE7\x9A\x84\xE4\xB8\x80\xE4\xB8\xAA\xE4\xB8\x8D\xE9\x94\x99\xE7\x9A\x84\xE4\xBE\x8B\xE5\xAD\x90\xE5\x9C\xA8 v4l2-event.c \xE4\xB8\xAD\xEF\xBC\x9A\xE7\x94\xA8\xE4\xBA\x8E
 929\xE6\x8E\xA7\xE5\x88\xB6\xE4\xBA\x8B\xE4\xBB\xB6\xE7\x9A\x84 ctrls_replace() \xE5\x92\x8C ctrls_merge() \xE5\x9B\x9E\xE8\xB0\x83\xE3\x80\x82
 930
 931\xE6\xB3\xA8\xE6\x84\x8F\xEF\xBC\x9A\xE8\xBF\x99\xE4\xBA\x9B\xE5\x9B\x9E\xE8\xB0\x83\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x9C\xA8\xE4\xB8\xAD\xE6\x96\xAD\xE4\xB8\x8A\xE4\xB8\x8B\xE6\x96\x87\xE4\xB8\xAD\xE8\xB0\x83\xE7\x94\xA8\xEF\xBC\x8C\xE6\x89\x80\xE4\xBB\xA5\xE5\xAE\x83\xE4\xBB\xAC\xE5\xBF\x85\xE9\xA1\xBB\xE5\xB0\xBD\xE5\xBF\xAB\xE5\xAE\x8C\xE6\x88\x90\xE5\xB9\xB6\xE9\x80\x80\xE5\x87\xBA\xE3\x80\x82
 932
 933\xE6\x9C\x89\xE7\x94\xA8\xE7\x9A\x84\xE5\x87\xBD\xE6\x95\xB0\xEF\xBC\x9A
 934
 935void v4l2_event_queue(struct video_device *vdev, const struct v4l2_event *ev)
 936
 937  \xE5\xB0\x86\xE4\xBA\x8B\xE4\xBB\xB6\xE5\x8A\xA0\xE5\x85\xA5\xE8\xA7\x86\xE9\xA2\x91\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84\xE9\x98\x9F\xE5\x88\x97\xE3\x80\x82\xE9\xA9\xB1\xE5\x8A\xA8\xE4\xBB\x85\xE8\xB4\x9F\xE8\xB4\xA3\xE5\xA1\xAB\xE5\x85\x85 type \xE5\x92\x8C data \xE5\x9F\x9F\xE3\x80\x82
 938  \xE5\x85\xB6\xE4\xBB\x96\xE5\x9F\x9F\xE7\x94\xB1 V4L2 \xE5\xA1\xAB\xE5\x85\x85\xE3\x80\x82
 939
 940int v4l2_event_subscribe(struct v4l2_fh *fh,
 941                         struct v4l2_event_subscription *sub, unsigned elems,
 942                         const struct v4l2_subscribed_event_ops *ops)
 943
 944  video_device->ioctl_ops->vidioc_subscribe_event \xE5\xBF\x85\xE9\xA1\xBB\xE6\xA3\x80\xE6\xB5\x8B\xE9\xA9\xB1\xE5\x8A\xA8\xE8\x83\xBD
 945  \xE4\xBA\xA7\xE7\x94\x9F\xE7\x89\xB9\xE5\xAE\x9A id \xE7\x9A\x84\xE4\xBA\x8B\xE4\xBB\xB6\xE3\x80\x82\xE7\x84\xB6\xE5\x90\x8E\xE8\xB0\x83\xE7\x94\xA8 v4l2_event_subscribe() \xE6\x9D\xA5\xE8\xAE\xA2\xE9\x98\x85\xE8\xAF\xA5\xE4\xBA\x8B\xE4\xBB\xB6\xE3\x80\x82
 946
 947  elems \xE5\x8F\x82\xE6\x95\xB0\xE6\x98\xAF\xE8\xAF\xA5\xE4\xBA\x8B\xE4\xBB\xB6\xE7\x9A\x84\xE9\x98\x9F\xE5\x88\x97\xE5\xA4\xA7\xE5\xB0\x8F\xE3\x80\x82\xE8\x8B\xA5\xE4\xB8\xBA 0\xEF\xBC\x8CV4L2 \xE6\xA1\x86\xE6\x9E\xB6\xE5\xB0\x86\xE4\xBC\x9A\xEF\xBC\x88\xE6\xA0\xB9\xE6\x8D\xAE\xE4\xBA\x8B\xE4\xBB\xB6\xE7\xB1\xBB\xE5\x9E\x8B\xEF\xBC\x89
 948  \xE5\xA1\xAB\xE5\x85\x85\xE9\xBB\x98\xE8\xAE\xA4\xE5\x80\xBC\xE3\x80\x82
 949
 950  ops \xE5\x8F\x82\xE6\x95\xB0\xE5\x85\x81\xE8\xAE\xB8\xE9\xA9\xB1\xE5\x8A\xA8\xE6\x8C\x87\xE5\xAE\x9A\xE4\xB8\x80\xE7\xB3\xBB\xE5\x88\x97\xE5\x9B\x9E\xE8\xB0\x83\xEF\xBC\x9A
 951  * add:     \xE5\xBD\x93\xE6\xB7\xBB\xE5\x8A\xA0\xE4\xB8\x80\xE4\xB8\xAA\xE6\x96\xB0\xE7\x9B\x91\xE5\x90\xAC\xE8\x80\x85\xE6\x97\xB6\xE8\xB0\x83\xE7\x94\xA8\xEF\xBC\x88\xE9\x87\x8D\xE5\xA4\x8D\xE8\xAE\xA2\xE9\x98\x85\xE5\x90\x8C\xE4\xB8\x80\xE4\xB8\xAA\xE4\xBA\x8B\xE4\xBB\xB6\xEF\xBC\x8C\xE6\xAD\xA4\xE5\x9B\x9E\xE8\xB0\x83
 952             \xE4\xBB\x85\xE8\xA2\xAB\xE6\x89\xA7\xE8\xA1\x8C\xE4\xB8\x80\xE6\xAC\xA1\xEF\xBC\x89\xE3\x80\x82
 953  * del:     \xE5\xBD\x93\xE4\xB8\x80\xE4\xB8\xAA\xE7\x9B\x91\xE5\x90\xAC\xE8\x80\x85\xE5\x81\x9C\xE6\xAD\xA2\xE7\x9B\x91\xE5\x90\xAC\xE6\x97\xB6\xE8\xB0\x83\xE7\x94\xA8\xE3\x80\x82
 954  * replace: \xE7\x94\xA8\xE2\x80\x98\xE6\x96\xB0\xE2\x80\x99\xE4\xBA\x8B\xE4\xBB\xB6\xE6\x9B\xBF\xE6\x8D\xA2\xE2\x80\x98\xE6\x97\xA9\xE6\x9C\x9F\xE2\x80\x98\xE4\xBA\x8B\xE4\xBB\xB6\xE3\x80\x82
 955  * merge:   \xE5\xB0\x86\xE2\x80\x98\xE6\x97\xA9\xE6\x9C\x9F\xE2\x80\x98\xE4\xBA\x8B\xE4\xBB\xB6\xE5\x90\x88\xE5\xB9\xB6\xE5\x88\xB0\xE2\x80\x98\xE6\x96\xB0\xE2\x80\x99\xE4\xBA\x8B\xE4\xBB\xB6\xE4\xB8\xAD\xE3\x80\x82
 956  \xE8\xBF\x99\xE5\x9B\x9B\xE4\xB8\xAA\xE8\xB0\x83\xE7\x94\xA8\xE9\x83\xBD\xE6\x98\xAF\xE5\x8F\xAF\xE9\x80\x89\xE7\x9A\x84\xEF\xBC\x8C\xE5\xA6\x82\xE6\x9E\x9C\xE4\xB8\x8D\xE6\x83\xB3\xE6\x8C\x87\xE5\xAE\x9A\xE4\xBB\xBB\xE4\xBD\x95\xE5\x9B\x9E\xE8\xB0\x83\xEF\xBC\x8C\xE5\x88\x99 ops \xE5\x8F\xAF\xE4\xB8\xBA NULL\xE3\x80\x82
 957
 958int v4l2_event_unsubscribe(struct v4l2_fh *fh,
 959                           struct v4l2_event_subscription *sub)
 960
 961  v4l2_ioctl_ops \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xB8\xAD\xE7\x9A\x84 vidioc_unsubscribe_event \xE5\x9B\x9E\xE8\xB0\x83\xE5\x87\xBD\xE6\x95\xB0\xE3\x80\x82
 962  \xE9\xA9\xB1\xE5\x8A\xA8\xE7\xA8\x8B\xE5\xBA\x8F\xE5\x8F\xAF\xE4\xBB\xA5\xE7\x9B\xB4\xE6\x8E\xA5\xE4\xBD\xBF\xE7\x94\xA8 v4l2_event_unsubscribe() \xE5\xAE\x9E\xE7\x8E\xB0\xE9\x80\x80\xE8\xAE\xA2\xE4\xBA\x8B\xE4\xBB\xB6\xE8\xBF\x87\xE7\xA8\x8B\xE3\x80\x82
 963
 964  \xE7\x89\xB9\xE6\xAE\x8A\xE7\x9A\x84 V4L2_EVENT_ALL \xE7\xB1\xBB\xE5\x9E\x8B\xEF\xBC\x8C\xE5\x8F\xAF\xE7\x94\xA8\xE4\xBA\x8E\xE9\x80\x80\xE8\xAE\xA2\xE6\x89\x80\xE6\x9C\x89\xE4\xBA\x8B\xE4\xBB\xB6\xE3\x80\x82\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x8F\xAF\xE8\x83\xBD\xE5\x9C\xA8\xE7\x89\xB9\xE6\xAE\x8A
 965  \xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xE9\x9C\x80\xE8\xA6\x81\xE5\x81\x9A\xE6\xAD\xA4\xE6\x93\x8D\xE4\xBD\x9C\xE3\x80\x82
 966
 967int v4l2_event_pending(struct v4l2_fh *fh)
 968
 969  \xE8\xBF\x94\xE5\x9B\x9E\xE6\x9C\xAA\xE5\x86\xB3\xE4\xBA\x8B\xE4\xBB\xB6\xE7\x9A\x84\xE6\x95\xB0\xE9\x87\x8F\xE3\x80\x82\xE6\x9C\x89\xE5\x8A\xA9\xE4\xBA\x8E\xE5\xAE\x9E\xE7\x8E\xB0\xE8\xBD\xAE\xE8\xAF\xA2\xEF\xBC\x88poll\xEF\xBC\x89\xE6\x93\x8D\xE4\xBD\x9C\xE3\x80\x82
 970
 971\xE4\xBA\x8B\xE4\xBB\xB6\xE9\x80\x9A\xE8\xBF\x87 poll \xE7\xB3\xBB\xE7\xBB\x9F\xE8\xB0\x83\xE7\x94\xA8\xE4\xBC\xA0\xE9\x80\x92\xE5\x88\xB0\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE3\x80\x82\xE9\xA9\xB1\xE5\x8A\xA8\xE5\x8F\xAF\xE7\x94\xA8
 972v4l2_fh->wait (wait_queue_head_t \xE7\xB1\xBB\xE5\x9E\x8B)\xE4\xBD\x9C\xE4\xB8\xBA\xE5\x8F\x82\xE6\x95\xB0\xE8\xB0\x83\xE7\x94\xA8 poll_wait()\xE3\x80\x82
 973
 974\xE4\xBA\x8B\xE4\xBB\xB6\xE5\x88\x86\xE4\xB8\xBA\xE6\xA0\x87\xE5\x87\x86\xE4\xBA\x8B\xE4\xBB\xB6\xE5\x92\x8C\xE7\xA7\x81\xE6\x9C\x89\xE4\xBA\x8B\xE4\xBB\xB6\xE3\x80\x82\xE6\x96\xB0\xE7\x9A\x84\xE6\xA0\x87\xE5\x87\x86\xE4\xBA\x8B\xE4\xBB\xB6\xE5\xBF\x85\xE9\xA1\xBB\xE4\xBD\xBF\xE7\x94\xA8\xE5\x8F\xAF\xE7\x94\xA8\xE7\x9A\x84\xE6\x9C\x80\xE5\xB0\x8F\xE4\xBA\x8B\xE4\xBB\xB6\xE7\xB1\xBB\xE5\x9E\x8B
 975\xE7\xBC\x96\xE5\x8F\xB7\xE3\x80\x82\xE9\xA9\xB1\xE5\x8A\xA8\xE5\xBF\x85\xE9\xA1\xBB\xE4\xBB\x8E\xE4\xBB\x96\xE4\xBB\xAC\xE6\x9C\xAC\xE7\xB1\xBB\xE5\x9E\x8B\xE7\x9A\x84\xE7\xBC\x96\xE5\x8F\xB7\xE8\xB5\xB7\xE5\xA7\x8B\xE5\xA4\x84\xE5\x88\x86\xE9\x85\x8D\xE4\xBA\x8B\xE4\xBB\xB6\xE3\x80\x82\xE7\xB1\xBB\xE5\x9E\x8B\xE7\x9A\x84\xE7\xBC\x96\xE5\x8F\xB7\xE8\xB5\xB7\xE5\xA7\x8B\xE4\xB8\xBA
 976V4L2_EVENT_PRIVATE_START + n * 1000 \xEF\xBC\x8C\xE5\x85\xB6\xE4\xB8\xAD n \xE4\xB8\xBA\xE5\x8F\xAF\xE7\x94\xA8\xE6\x9C\x80\xE5\xB0\x8F\xE7\xBC\x96\xE5\x8F\xB7\xE3\x80\x82\xE6\xAF\x8F\xE4\xB8\xAA
 977\xE7\xB1\xBB\xE5\x9E\x8B\xE4\xB8\xAD\xE7\x9A\x84\xE7\xAC\xAC\xE4\xB8\x80\xE4\xB8\xAA\xE4\xBA\x8B\xE4\xBB\xB6\xE7\xB1\xBB\xE5\x9E\x8B\xE7\xBC\x96\xE5\x8F\xB7\xE6\x98\xAF\xE4\xB8\xBA\xE4\xBB\xA5\xE5\x90\x8E\xE7\x9A\x84\xE4\xBD\xBF\xE7\x94\xA8\xE4\xBF\x9D\xE7\x95\x99\xE7\x9A\x84\xEF\xBC\x8C\xE6\x89\x80\xE4\xBB\xA5\xE7\xAC\xAC\xE4\xB8\x80\xE4\xB8\xAA\xE5\x8F\xAF\xE7\x94\xA8\xE4\xBA\x8B\xE4\xBB\xB6
 978\xE7\xB1\xBB\xE5\x9E\x8B\xE7\xBC\x96\xE5\x8F\xB7\xE6\x98\xAF\xE2\x80\x98class base + 1\xE2\x80\x99\xE3\x80\x82
 979
 980V4L2 \xE4\xBA\x8B\xE4\xBB\xB6\xE6\x9C\xBA\xE5\x88\xB6\xE7\x9A\x84\xE4\xBD\xBF\xE7\x94\xA8\xE5\xAE\x9E\xE4\xBE\x8B\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x9C\xA8 OMAP3 ISP \xE7\x9A\x84\xE9\xA9\xB1\xE5\x8A\xA8
 981(drivers/media/video/omap3isp)\xE4\xB8\xAD\xE6\x89\xBE\xE5\x88\xB0\xE3\x80\x82
 982
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.