soc_mediabus.c revision 93f116d595e9aa7dca5f6507376d6995f217d420
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 }, 17293f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski}, 1739a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski}; 1749a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski 17548a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzoint soc_mbus_samples_per_pixel(const struct soc_mbus_pixelfmt *mf) 17648a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo{ 17748a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo switch (mf->packing) { 17848a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo case SOC_MBUS_PACKING_NONE: 17948a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo case SOC_MBUS_PACKING_EXTEND16: 18048a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo return 1; 18148a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo case SOC_MBUS_PACKING_2X8_PADHI: 18248a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo case SOC_MBUS_PACKING_2X8_PADLO: 18348a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo return 2; 18464149deb6a9ec35cc8a3ac3e7b5bc19d4a79ff44Kassey Li case SOC_MBUS_PACKING_VARIABLE: 18564149deb6a9ec35cc8a3ac3e7b5bc19d4a79ff44Kassey Li return 0; 18648a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo } 18748a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo return -EINVAL; 18848a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo} 18948a3c77338d725d4976fa792d822eb940ce5c296Alberto PanizzoEXPORT_SYMBOL(soc_mbus_samples_per_pixel); 19048a3c77338d725d4976fa792d822eb940ce5c296Alberto Panizzo 1919a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetskis32 soc_mbus_bytes_per_line(u32 width, const struct soc_mbus_pixelfmt *mf) 1929a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski{ 1939a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski switch (mf->packing) { 1949a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski case SOC_MBUS_PACKING_NONE: 1959a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski return width * mf->bits_per_sample / 8; 1969a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski case SOC_MBUS_PACKING_2X8_PADHI: 1979a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski case SOC_MBUS_PACKING_2X8_PADLO: 1989a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski case SOC_MBUS_PACKING_EXTEND16: 1999a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski return width * 2; 20064149deb6a9ec35cc8a3ac3e7b5bc19d4a79ff44Kassey Li case SOC_MBUS_PACKING_VARIABLE: 20164149deb6a9ec35cc8a3ac3e7b5bc19d4a79ff44Kassey Li return 0; 2029a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski } 2039a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski return -EINVAL; 2049a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski} 2059a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi LiakhovetskiEXPORT_SYMBOL(soc_mbus_bytes_per_line); 2069a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski 20793f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetskiconst struct soc_mbus_pixelfmt *soc_mbus_find_fmtdesc( 20893f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski enum v4l2_mbus_pixelcode code, 20993f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski const struct soc_mbus_lookup *lookup, 21093f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski int n) 21193f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski{ 21293f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski int i; 21393f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski 21493f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski for (i = 0; i < n; i++) 21593f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski if (lookup[i].code == code) 21693f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski return &lookup[i].fmt; 21793f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski 21893f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski return NULL; 21993f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski} 22093f116d595e9aa7dca5f6507376d6995f217d420Guennadi LiakhovetskiEXPORT_SYMBOL(soc_mbus_find_fmtdesc); 22193f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski 2229a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetskiconst struct soc_mbus_pixelfmt *soc_mbus_get_fmtdesc( 2239a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski enum v4l2_mbus_pixelcode code) 2249a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski{ 22593f116d595e9aa7dca5f6507376d6995f217d420Guennadi Liakhovetski return soc_mbus_find_fmtdesc(code, mbus_fmt, ARRAY_SIZE(mbus_fmt)); 2269a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski} 2279a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi LiakhovetskiEXPORT_SYMBOL(soc_mbus_get_fmtdesc); 2289a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski 2299a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetskistatic int __init soc_mbus_init(void) 2309a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski{ 2319a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski return 0; 2329a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski} 2339a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski 2349a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetskistatic void __exit soc_mbus_exit(void) 2359a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski{ 2369a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski} 2379a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski 2389a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetskimodule_init(soc_mbus_init); 2399a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetskimodule_exit(soc_mbus_exit); 2409a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski 2419a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi LiakhovetskiMODULE_DESCRIPTION("soc-camera media bus interface"); 2429a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi LiakhovetskiMODULE_AUTHOR("Guennadi Liakhovetski <g.liakhovetski@gmx.de>"); 2439a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi LiakhovetskiMODULE_LICENSE("GPL v2"); 244