19a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski/* 29a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski * soc-camera media bus helper routines 39a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski * 49a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski@gmx.de> 59a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski * 69a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski * This program is free software; you can redistribute it and/or modify 79a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski * it under the terms of the GNU General Public License version 2 as 89a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski * published by the Free Software Foundation. 99a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski */ 109a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski 119a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski#include <linux/kernel.h> 129a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski#include <linux/module.h> 139a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski 149a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski#include <media/v4l2-device.h> 159a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski#include <media/v4l2-mediabus.h> 169a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski#include <media/soc_mediabus.h> 179a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski 1893f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetskistatic const struct soc_mbus_lookup mbus_fmt[] = { 1993f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski{ 2093f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_YUYV8_2X8, 2193f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 229a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_YUYV, 239a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "YUYV", 249a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 8, 259a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_2X8_PADHI, 269a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 2781355e40826acea76274c2ef5ff7d156ff28d183Guennadi Liakhovetski }, 2893f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 2993f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_YVYU8_2X8, 3093f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 319a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_YVYU, 329a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "YVYU", 339a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 8, 349a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_2X8_PADHI, 359a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 3681355e40826acea76274c2ef5ff7d156ff28d183Guennadi Liakhovetski }, 3793f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 3893f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_UYVY8_2X8, 3993f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 409a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_UYVY, 419a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "UYVY", 429a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 8, 439a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_2X8_PADHI, 449a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 4581355e40826acea76274c2ef5ff7d156ff28d183Guennadi Liakhovetski }, 4693f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 4793f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_VYUY8_2X8, 4893f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 499a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_VYUY, 509a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "VYUY", 519a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 8, 529a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_2X8_PADHI, 539a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 5481355e40826acea76274c2ef5ff7d156ff28d183Guennadi Liakhovetski }, 5593f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 5693f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE, 5793f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 589a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_RGB555, 599a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "RGB555", 609a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 8, 619a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_2X8_PADHI, 629a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 6381355e40826acea76274c2ef5ff7d156ff28d183Guennadi Liakhovetski }, 6493f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 6593f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE, 6693f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 679a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_RGB555X, 689a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "RGB555X", 699a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 8, 709a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_2X8_PADHI, 719a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 7281355e40826acea76274c2ef5ff7d156ff28d183Guennadi Liakhovetski }, 7393f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 7493f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_RGB565_2X8_LE, 7593f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 769a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_RGB565, 779a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "RGB565", 789a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 8, 799a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_2X8_PADHI, 809a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 8181355e40826acea76274c2ef5ff7d156ff28d183Guennadi Liakhovetski }, 8293f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 8393f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_RGB565_2X8_BE, 8493f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 859a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_RGB565X, 869a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "RGB565X", 879a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 8, 889a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_2X8_PADHI, 899a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 9081355e40826acea76274c2ef5ff7d156ff28d183Guennadi Liakhovetski }, 9193f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 9293f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_SBGGR8_1X8, 9393f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 949a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_SBGGR8, 959a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "Bayer 8 BGGR", 969a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 8, 979a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_NONE, 989a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 9981355e40826acea76274c2ef5ff7d156ff28d183Guennadi Liakhovetski }, 10093f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 10193f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_SBGGR10_1X10, 10293f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 1039a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_SBGGR10, 1049a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "Bayer 10 BGGR", 1059a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 10, 1069a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_EXTEND16, 1079a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 10881355e40826acea76274c2ef5ff7d156ff28d183Guennadi Liakhovetski }, 10993f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 11093f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_Y8_1X8, 11193f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 1129a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_GREY, 1139a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "Grey", 1149a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 8, 1159a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_NONE, 1169a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 11781355e40826acea76274c2ef5ff7d156ff28d183Guennadi Liakhovetski }, 11893f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 11993f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_Y10_1X10, 12093f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 1219a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_Y10, 1229a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "Grey 10bit", 1239a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 10, 1249a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_EXTEND16, 1259a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 12681355e40826acea76274c2ef5ff7d156ff28d183Guennadi Liakhovetski }, 12793f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 12893f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_LE, 12993f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 1309a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_SBGGR10, 1319a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "Bayer 10 BGGR", 1329a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 8, 1339a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_2X8_PADHI, 1349a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 13581355e40826acea76274c2ef5ff7d156ff28d183Guennadi Liakhovetski }, 13693f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 13793f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE, 13893f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 1399a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_SBGGR10, 1409a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "Bayer 10 BGGR", 1419a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 8, 1429a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_2X8_PADLO, 1439a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 14481355e40826acea76274c2ef5ff7d156ff28d183Guennadi Liakhovetski }, 14593f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 14693f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE, 14793f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 1489a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_SBGGR10, 1499a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "Bayer 10 BGGR", 1509a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 8, 1519a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_2X8_PADHI, 1529a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_BE, 15381355e40826acea76274c2ef5ff7d156ff28d183Guennadi Liakhovetski }, 15493f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 15593f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE, 15693f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 1579a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .fourcc = V4L2_PIX_FMT_SBGGR10, 1589a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .name = "Bayer 10 BGGR", 1599a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .bits_per_sample = 8, 1609a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .packing = SOC_MBUS_PACKING_2X8_PADLO, 1619a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski .order = SOC_MBUS_ORDER_BE, 1629a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski }, 16393f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, { 16493f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .code = V4L2_MBUS_FMT_JPEG_1X8, 16593f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski .fmt = { 16664149deb6a9ec35cc8a3ac3e7b5bc19d4a79ff44Kassey Li .fourcc = V4L2_PIX_FMT_JPEG, 16764149deb6a9ec35cc8a3ac3e7b5bc19d4a79ff44Kassey Li .name = "JPEG", 16864149deb6a9ec35cc8a3ac3e7b5bc19d4a79ff44Kassey Li .bits_per_sample = 8, 16964149deb6a9ec35cc8a3ac3e7b5bc19d4a79ff44Kassey Li .packing = SOC_MBUS_PACKING_VARIABLE, 17064149deb6a9ec35cc8a3ac3e7b5bc19d4a79ff44Kassey Li .order = SOC_MBUS_ORDER_LE, 17164149deb6a9ec35cc8a3ac3e7b5bc19d4a79ff44Kassey Li }, 172e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 173e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_RGB444_2X8_PADHI_BE, 174e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 175e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_RGB444, 176e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "RGB444", 177e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 8, 178e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_2X8_PADHI, 179e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_BE, 180e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 181e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 182e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_YUYV8_1_5X8, 183e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 184e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_YUV420, 185e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "YUYV 4:2:0", 186e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 8, 187e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_1_5X8, 188e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 189e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 190e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 191e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_YVYU8_1_5X8, 192e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 193e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_YVU420, 194e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "YVYU 4:2:0", 195e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 8, 196e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_1_5X8, 197e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 198e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 199e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 200e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_UYVY8_1X16, 201e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 202e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_UYVY, 203e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "UYVY 16bit", 204e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 16, 205e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_EXTEND16, 206e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 207e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 208e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 209e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_VYUY8_1X16, 210e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 211e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_VYUY, 212e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "VYUY 16bit", 213e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 16, 214e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_EXTEND16, 215e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 216e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 217e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 218e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_YUYV8_1X16, 219e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 220e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_YUYV, 221e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "YUYV 16bit", 222e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 16, 223e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_EXTEND16, 224e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 225e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 226e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 227e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_YVYU8_1X16, 228e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 229e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_YVYU, 230e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "YVYU 16bit", 231e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 16, 232e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_EXTEND16, 233e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 234e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 235e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 236e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_SGRBG8_1X8, 237e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 238e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_SGRBG8, 239e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "Bayer 8 GRBG", 240e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 8, 241e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_NONE, 242e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 243e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 244e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 245e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8, 246e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 247e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_SGRBG10DPCM8, 248e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "Bayer 10 BGGR DPCM 8", 249e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 8, 250e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_NONE, 251e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 252e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 253e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 254e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_SGBRG10_1X10, 255e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 256e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_SGBRG10, 257e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "Bayer 10 GBRG", 258e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 10, 259e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_EXTEND16, 260e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 261e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 262e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 263e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_SGRBG10_1X10, 264e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 265e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_SGRBG10, 266e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "Bayer 10 GRBG", 267e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 10, 268e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_EXTEND16, 269e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 270e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 271e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 272e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_SRGGB10_1X10, 273e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 274e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_SRGGB10, 275e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "Bayer 10 RGGB", 276e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 10, 277e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_EXTEND16, 278e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 279e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 280e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 281e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_SBGGR12_1X12, 282e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 283e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_SBGGR12, 284e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "Bayer 12 BGGR", 285e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 12, 286e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_EXTEND16, 287e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 288e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 289e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 290e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_SGBRG12_1X12, 291e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 292e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_SGBRG12, 293e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "Bayer 12 GBRG", 294e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 12, 295e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_EXTEND16, 296e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 297e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 298e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 299e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_SGRBG12_1X12, 300e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 301e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_SGRBG12, 302e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "Bayer 12 GRBG", 303e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 12, 304e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_EXTEND16, 305e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 306e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 307e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski}, { 308e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .code = V4L2_MBUS_FMT_SRGGB12_1X12, 309e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fmt = { 310e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .fourcc = V4L2_PIX_FMT_SRGGB12, 311e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .name = "Bayer 12 RGGB", 312e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .bits_per_sample = 12, 313e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .packing = SOC_MBUS_PACKING_EXTEND16, 314e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski .order = SOC_MBUS_ORDER_LE, 315e23b961dd1206aceaad28233212f3d506595432fGuennadi Liakhovetski }, 31693f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, 3179a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski}; 3189a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski 319cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetskiint soc_mbus_samples_per_pixel(const struct soc_mbus_pixelfmt *mf, 320cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetski unsigned int *numerator, unsigned int *denominator) 32148a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo{ 32248a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo switch (mf->packing) { 32348a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo case SOC_MBUS_PACKING_NONE: 32448a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo case SOC_MBUS_PACKING_EXTEND16: 325cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetski *numerator = 1; 326cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetski *denominator = 1; 327cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetski return 0; 32848a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo case SOC_MBUS_PACKING_2X8_PADHI: 32948a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo case SOC_MBUS_PACKING_2X8_PADLO: 330cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetski *numerator = 2; 331cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetski *denominator = 1; 332cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetski return 0; 333cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetski case SOC_MBUS_PACKING_1_5X8: 334cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetski *numerator = 3; 335cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetski *denominator = 2; 336cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetski return 0; 33764149deb6a9ec35cc8a3ac3e7b5bc19d4a79ff44Kassey Li case SOC_MBUS_PACKING_VARIABLE: 338cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetski *numerator = 0; 339cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetski *denominator = 1; 34064149deb6a9ec35cc8a3ac3e7b5bc19d4a79ff44Kassey Li return 0; 34148a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo } 34248a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo return -EINVAL; 34348a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo} 34448a3c77338d725d4976fa792d822eb940ce5c296Alberto PanizzoEXPORT_SYMBOL(soc_mbus_samples_per_pixel); 34548a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo 3469a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetskis32 soc_mbus_bytes_per_line(u32 width, const struct soc_mbus_pixelfmt *mf) 3479a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski{ 3489a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski switch (mf->packing) { 3499a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski case SOC_MBUS_PACKING_NONE: 3509a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski return width * mf->bits_per_sample / 8; 3519a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski case SOC_MBUS_PACKING_2X8_PADHI: 3529a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski case SOC_MBUS_PACKING_2X8_PADLO: 3539a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski case SOC_MBUS_PACKING_EXTEND16: 3549a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski return width * 2; 355cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetski case SOC_MBUS_PACKING_1_5X8: 356cc552b620fa3a184ba3d4064223ca1d59325b166Guennadi Liakhovetski return width * 3 / 2; 35764149deb6a9ec35cc8a3ac3e7b5bc19d4a79ff44Kassey Li case SOC_MBUS_PACKING_VARIABLE: 35864149deb6a9ec35cc8a3ac3e7b5bc19d4a79ff44Kassey Li return 0; 3599a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski } 3609a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski return -EINVAL; 3619a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski} 3629a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi LiakhovetskiEXPORT_SYMBOL(soc_mbus_bytes_per_line); 3639a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski 36493f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetskiconst struct soc_mbus_pixelfmt *soc_mbus_find_fmtdesc( 36593f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski enum v4l2_mbus_pixelcode code, 36693f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski const struct soc_mbus_lookup *lookup, 36793f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski int n) 36893f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski{ 36993f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski int i; 37093f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski 37193f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski for (i = 0; i < n; i++) 37293f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski if (lookup[i].code == code) 37393f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski return &lookup[i].fmt; 37493f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski 37593f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski return NULL; 37693f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski} 37793f116d595e9aa7dca5f6507376d6995f217d420Guennadi LiakhovetskiEXPORT_SYMBOL(soc_mbus_find_fmtdesc); 37893f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski 3799a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetskiconst struct soc_mbus_pixelfmt *soc_mbus_get_fmtdesc( 3809a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski enum v4l2_mbus_pixelcode code) 3819a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski{ 38293f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski return soc_mbus_find_fmtdesc(code, mbus_fmt, ARRAY_SIZE(mbus_fmt)); 3839a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski} 3849a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi LiakhovetskiEXPORT_SYMBOL(soc_mbus_get_fmtdesc); 3859a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski 38632c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetskiunsigned int soc_mbus_config_compatible(const struct v4l2_mbus_config *cfg, 38732c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski unsigned int flags) 38832c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski{ 38932c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski unsigned long common_flags; 39032c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski bool hsync = true, vsync = true, pclk, data, mode; 39132c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski bool mipi_lanes, mipi_clock; 39232c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski 39332c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski common_flags = cfg->flags & flags; 39432c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski 39532c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski switch (cfg->type) { 39632c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski case V4L2_MBUS_PARALLEL: 39732c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski hsync = common_flags & (V4L2_MBUS_HSYNC_ACTIVE_HIGH | 39832c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski V4L2_MBUS_HSYNC_ACTIVE_LOW); 39932c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski vsync = common_flags & (V4L2_MBUS_VSYNC_ACTIVE_HIGH | 40032c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski V4L2_MBUS_VSYNC_ACTIVE_LOW); 40132c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski case V4L2_MBUS_BT656: 40232c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski pclk = common_flags & (V4L2_MBUS_PCLK_SAMPLE_RISING | 40332c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski V4L2_MBUS_PCLK_SAMPLE_FALLING); 40432c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski data = common_flags & (V4L2_MBUS_DATA_ACTIVE_HIGH | 40532c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski V4L2_MBUS_DATA_ACTIVE_LOW); 40632c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski mode = common_flags & (V4L2_MBUS_MASTER | V4L2_MBUS_SLAVE); 40732c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski return (!hsync || !vsync || !pclk || !data || !mode) ? 40832c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski 0 : common_flags; 40932c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski case V4L2_MBUS_CSI2: 41032c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski mipi_lanes = common_flags & V4L2_MBUS_CSI2_LANES; 41132c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski mipi_clock = common_flags & (V4L2_MBUS_CSI2_NONCONTINUOUS_CLOCK | 41232c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski V4L2_MBUS_CSI2_CONTINUOUS_CLOCK); 41332c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski return (!mipi_lanes || !mipi_clock) ? 0 : common_flags; 41432c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski } 41532c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski return 0; 41632c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski} 41732c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi LiakhovetskiEXPORT_SYMBOL(soc_mbus_config_compatible); 41832c69fcc785a2f8122c73d44ad160d9cfc4c9615Guennadi Liakhovetski 4199a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetskistatic int __init soc_mbus_init(void) 4209a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski{ 4219a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski return 0; 4229a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski} 4239a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski 4249a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetskistatic void __exit soc_mbus_exit(void) 4259a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski{ 4269a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski} 4279a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski 4289a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetskimodule_init(soc_mbus_init); 4299a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetskimodule_exit(soc_mbus_exit); 4309a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski 4319a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi LiakhovetskiMODULE_DESCRIPTION("soc-camera media bus interface"); 4329a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi LiakhovetskiMODULE_AUTHOR("Guennadi Liakhovetski <g.liakhovetski@gmx.de>"); 4339a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi LiakhovetskiMODULE_LICENSE("GPL v2"); 434