€•›6Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ//translations/zh_CN/admin-guide/media/cafe_ccic”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/zh_TW/admin-guide/media/cafe_ccic”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/it_IT/admin-guide/media/cafe_ccic”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/ja_JP/admin-guide/media/cafe_ccic”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/ko_KR/admin-guide/media/cafe_ccic”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/sp_SP/admin-guide/media/cafe_ccic”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh£sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1h¡hhhžhhŸŒI/var/lib/git/docbuild/linux/Documentation/admin-guide/media/cafe_ccic.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒThe cafe_ccic driver”h]”hŒThe cafe_ccic driver”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h KubhŒ paragraph”“”)”}”(hŒ(Author: Jonathan Corbet ”h]”(hŒAuthor: Jonathan Corbet <”…””}”(hhËhžhhŸNh NubhŒ reference”“”)”}”(hŒcorbet@lwn.net”h]”hŒcorbet@lwn.net”…””}”(hhÕhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:corbet@lwn.net”uh1hÓhhËubhŒ>”…””}”(hhËhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhµ)”}”(hhh]”(hº)”}”(hŒ Introduction”h]”hŒ Introduction”…””}”(hhòhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hhïhžhhŸh³h K ubhÊ)”}”(hŒÎ"cafe_ccic" is a driver for the Marvell 88ALP01 "cafe" CMOS camera controller. This is the controller found in first-generation OLPC systems, and this driver was written with support from the OLPC project.”h]”hŒÖ“cafe_ccic†is a driver for the Marvell 88ALP01 “cafe†CMOS camera controller. This is the controller found in first-generation OLPC systems, and this driver was written with support from the OLPC project.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hhïhžhubhÊ)”}”(hXeCurrent status: the core driver works. It can generate data in YUV422, RGB565, and RGB444 formats. (Anybody looking at the code will see RGB32 as well, but that is a debugging aid which will be removed shortly). VGA and QVGA modes work; CIF is there but the colors remain funky. Only the OV7670 sensor is known to work with this controller at this time.”h]”hXeCurrent status: the core driver works. It can generate data in YUV422, RGB565, and RGB444 formats. (Anybody looking at the code will see RGB32 as well, but that is a debugging aid which will be removed shortly). VGA and QVGA modes work; CIF is there but the colors remain funky. Only the OV7670 sensor is known to work with this controller at this time.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhhïhžhubhÊ)”}”(hŒ2To try it out: either of these commands will work:”h]”hŒ2To try it out: either of these commands will work:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhhïhžhubhŒ literal_block”“”)”}”(hŒˆ$ mplayer tv:// -tv driver=v4l2:width=640:height=480 -nosound $ mplayer tv:// -tv driver=v4l2:width=640:height=480:outfmt=bgr16 -nosound”h]”hŒˆ$ mplayer tv:// -tv driver=v4l2:width=640:height=480 -nosound $ mplayer tv:// -tv driver=v4l2:width=640:height=480:outfmt=bgr16 -nosound”…””}”hj,sbah}”(h]”h ]”h"]”h$]”h&]”h±h²Œforce”‰Œlanguage”Œnone”Œhighlight_args”}”uh1j*hŸh³h KhhïhžhubhÊ)”}”(hŒDThe "xawtv" utility also works; gqcam does not, for unknown reasons.”h]”hŒHThe “xawtv†utility also works; gqcam does not, for unknown reasons.”…””}”(hj?hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khhïhžhubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1h´hh¶hžhhŸh³h K ubhµ)”}”(hhh]”(hº)”}”(hŒLoad time options”h]”hŒLoad time options”…””}”(hjXhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjUhžhhŸh³h KubhÊ)”}”(hŒ`There are a few load-time options, most of which can be changed after loading via sysfs as well:”h]”hŒ`There are a few load-time options, most of which can be changed after loading via sysfs as well:”…””}”(hjfhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K!hjUhžhubhŒ block_quote”“”)”}”(hXj- alloc_bufs_at_load: Normally, the driver will not allocate any DMA buffers until the time comes to transfer data. If this option is set, then worst-case-sized buffers will be allocated at module load time. This option nails down the memory for the life of the module, but perhaps decreases the chances of an allocation failure later on. - dma_buf_size: The size of DMA buffers to allocate. Note that this option is only consulted for load-time allocation; when buffers are allocated at run time, they will be sized appropriately for the current camera settings. - n_dma_bufs: The controller can cycle through either two or three DMA buffers. Normally, the driver tries to use three buffers; on faster systems, however, it will work well with only two. - min_buffers: The minimum number of streaming I/O buffers that the driver will consent to work with. Default is one, but, on slower systems, better behavior with mplayer can be achieved by setting to a higher value (like six). - max_buffers: The maximum number of streaming I/O buffers; default is ten. That number was carefully picked out of a hat and should not be assumed to actually mean much of anything. - flip: If this boolean parameter is set, the sensor will be instructed to invert the video image. Whether it makes sense is determined by how your particular camera is mounted.”h]”hŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hXSalloc_bufs_at_load: Normally, the driver will not allocate any DMA buffers until the time comes to transfer data. If this option is set, then worst-case-sized buffers will be allocated at module load time. This option nails down the memory for the life of the module, but perhaps decreases the chances of an allocation failure later on. ”h]”hÊ)”}”(hXRalloc_bufs_at_load: Normally, the driver will not allocate any DMA buffers until the time comes to transfer data. If this option is set, then worst-case-sized buffers will be allocated at module load time. This option nails down the memory for the life of the module, but perhaps decreases the chances of an allocation failure later on.”h]”hXRalloc_bufs_at_load: Normally, the driver will not allocate any DMA buffers until the time comes to transfer data. If this option is set, then worst-case-sized buffers will be allocated at module load time. This option nails down the memory for the life of the module, but perhaps decreases the chances of an allocation failure later on.”…””}”(hj…hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K$hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|ubj€)”}”(hŒàdma_buf_size: The size of DMA buffers to allocate. Note that this option is only consulted for load-time allocation; when buffers are allocated at run time, they will be sized appropriately for the current camera settings. ”h]”hÊ)”}”(hŒßdma_buf_size: The size of DMA buffers to allocate. Note that this option is only consulted for load-time allocation; when buffers are allocated at run time, they will be sized appropriately for the current camera settings.”h]”hŒßdma_buf_size: The size of DMA buffers to allocate. Note that this option is only consulted for load-time allocation; when buffers are allocated at run time, they will be sized appropriately for the current camera settings.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K*hj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|ubj€)”}”(hŒ½n_dma_bufs: The controller can cycle through either two or three DMA buffers. Normally, the driver tries to use three buffers; on faster systems, however, it will work well with only two. ”h]”hÊ)”}”(hŒ¼n_dma_bufs: The controller can cycle through either two or three DMA buffers. Normally, the driver tries to use three buffers; on faster systems, however, it will work well with only two.”h]”hŒ¼n_dma_bufs: The controller can cycle through either two or three DMA buffers. Normally, the driver tries to use three buffers; on faster systems, however, it will work well with only two.”…””}”(hjµhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K/hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|ubj€)”}”(hŒãmin_buffers: The minimum number of streaming I/O buffers that the driver will consent to work with. Default is one, but, on slower systems, better behavior with mplayer can be achieved by setting to a higher value (like six). ”h]”hÊ)”}”(hŒâmin_buffers: The minimum number of streaming I/O buffers that the driver will consent to work with. Default is one, but, on slower systems, better behavior with mplayer can be achieved by setting to a higher value (like six).”h]”hŒâmin_buffers: The minimum number of streaming I/O buffers that the driver will consent to work with. Default is one, but, on slower systems, better behavior with mplayer can be achieved by setting to a higher value (like six).”…””}”(hjÍhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K3hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|ubj€)”}”(hŒ¶max_buffers: The maximum number of streaming I/O buffers; default is ten. That number was carefully picked out of a hat and should not be assumed to actually mean much of anything. ”h]”hÊ)”}”(hŒµmax_buffers: The maximum number of streaming I/O buffers; default is ten. That number was carefully picked out of a hat and should not be assumed to actually mean much of anything.”h]”hŒµmax_buffers: The maximum number of streaming I/O buffers; default is ten. That number was carefully picked out of a hat and should not be assumed to actually mean much of anything.”…””}”(hjåhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K8hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|ubj€)”}”(hŒ°flip: If this boolean parameter is set, the sensor will be instructed to invert the video image. Whether it makes sense is determined by how your particular camera is mounted.”h]”hÊ)”}”(hŒ°flip: If this boolean parameter is set, the sensor will be instructed to invert the video image. Whether it makes sense is determined by how your particular camera is mounted.”h]”hŒ°flip: If this boolean parameter is set, the sensor will be instructed to invert the video image. Whether it makes sense is determined by how your particular camera is mounted.”…””}”(hjýhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K