/* SPDX-License-Identifier: GPL-2.0 */ /* * camss-format.h * * Qualcomm MSM Camera Subsystem - Format helpers * * Copyright (c) 2023, The Linux Foundation. All rights reserved. * Copyright (c) 2023 Qualcomm Technologies, Inc. */ #ifndef __CAMSS_FORMAT_H__ #define __CAMSS_FORMAT_H__ #include <linux/types.h> #define PER_PLANE_DATA(plane, h_fract_num, h_fract_den, v_fract_num, v_fract_den, _bpp) \ .hsub[(plane)].numerator = (h_fract_num), \ .hsub[(plane)].denominator = (h_fract_den), \ .vsub[(plane)].numerator = (v_fract_num), \ .vsub[(plane)].denominator = (v_fract_den), \ .bpp[(plane)] = (_bpp) /* * struct fract - Represents a fraction * @numerator: Store the numerator part of the fraction * @denominator: Store the denominator part of the fraction */ struct fract { u8 numerator; u8 denominator; }; /* * struct camss_format_info - ISP media bus format information * @code: V4L2 media bus format code * @mbus_bpp: Media bus bits per pixel * @pixelformat: V4L2 pixel format FCC identifier * @planes: Number of planes * @hsub: Horizontal subsampling (for each plane) * @vsub: Vertical subsampling (for each plane) * @bpp: Bits per pixel when stored in memory (for each plane) */ struct camss_format_info { u32 code; u32 mbus_bpp; u32 pixelformat; u8 planes; struct fract hsub[3]; struct fract vsub[3]; unsigned int bpp[3]; }; struct camss_formats { unsigned int nformats; const struct camss_format_info *formats; }; u8 camss_format_get_bpp(const struct camss_format_info *formats, unsigned int nformats, u32 code); u32 camss_format_find_code(u32 *code, unsigned int n_code, unsigned int index, u32 req_code); int camss_format_find_format(u32 code, u32 pixelformat, const struct camss_format_info *formats, unsigned int nformats); #endif /* __CAMSS_FORMAT_H__ */