xref: /openbmc/linux/drivers/media/test-drivers/vivid/vivid-rds-gen.h (revision 4b4193256c8d3bc3a5397b5cd9494c2ad386317d)
1*dacca5f0SHans Verkuil /* SPDX-License-Identifier: GPL-2.0-only */
2*dacca5f0SHans Verkuil /*
3*dacca5f0SHans Verkuil  * vivid-rds-gen.h - rds (radio data system) generator support functions.
4*dacca5f0SHans Verkuil  *
5*dacca5f0SHans Verkuil  * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
6*dacca5f0SHans Verkuil  */
7*dacca5f0SHans Verkuil 
8*dacca5f0SHans Verkuil #ifndef _VIVID_RDS_GEN_H_
9*dacca5f0SHans Verkuil #define _VIVID_RDS_GEN_H_
10*dacca5f0SHans Verkuil 
11*dacca5f0SHans Verkuil /*
12*dacca5f0SHans Verkuil  * It takes almost exactly 5 seconds to transmit 57 RDS groups.
13*dacca5f0SHans Verkuil  * Each group has 4 blocks and each block has a payload of 16 bits + a
14*dacca5f0SHans Verkuil  * block identification. The driver will generate the contents of these
15*dacca5f0SHans Verkuil  * 57 groups only when necessary and it will just be played continuously.
16*dacca5f0SHans Verkuil  */
17*dacca5f0SHans Verkuil #define VIVID_RDS_GEN_GROUPS 57
18*dacca5f0SHans Verkuil #define VIVID_RDS_GEN_BLKS_PER_GRP 4
19*dacca5f0SHans Verkuil #define VIVID_RDS_GEN_BLOCKS (VIVID_RDS_GEN_BLKS_PER_GRP * VIVID_RDS_GEN_GROUPS)
20*dacca5f0SHans Verkuil #define VIVID_RDS_NSEC_PER_BLK (u32)(5ull * NSEC_PER_SEC / VIVID_RDS_GEN_BLOCKS)
21*dacca5f0SHans Verkuil 
22*dacca5f0SHans Verkuil struct vivid_rds_gen {
23*dacca5f0SHans Verkuil 	struct v4l2_rds_data	data[VIVID_RDS_GEN_BLOCKS];
24*dacca5f0SHans Verkuil 	bool			use_rbds;
25*dacca5f0SHans Verkuil 	u16			picode;
26*dacca5f0SHans Verkuil 	u8			pty;
27*dacca5f0SHans Verkuil 	bool			mono_stereo;
28*dacca5f0SHans Verkuil 	bool			art_head;
29*dacca5f0SHans Verkuil 	bool			compressed;
30*dacca5f0SHans Verkuil 	bool			dyn_pty;
31*dacca5f0SHans Verkuil 	bool			ta;
32*dacca5f0SHans Verkuil 	bool			tp;
33*dacca5f0SHans Verkuil 	bool			ms;
34*dacca5f0SHans Verkuil 	char			psname[8 + 1];
35*dacca5f0SHans Verkuil 	char			radiotext[64 + 1];
36*dacca5f0SHans Verkuil };
37*dacca5f0SHans Verkuil 
38*dacca5f0SHans Verkuil void vivid_rds_gen_fill(struct vivid_rds_gen *rds, unsigned freq,
39*dacca5f0SHans Verkuil 		    bool use_alternate);
40*dacca5f0SHans Verkuil void vivid_rds_generate(struct vivid_rds_gen *rds);
41*dacca5f0SHans Verkuil 
42*dacca5f0SHans Verkuil #endif
43