xref: /linux/drivers/media/dvb-frontends/helene.h (revision cdd38c5f1ce4398ec58fec95904b75824daab7b5)
1c942fddfSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
22dc1ed4eSAbylay Ospan /*
32dc1ed4eSAbylay Ospan  * helene.h
42dc1ed4eSAbylay Ospan  *
52dc1ed4eSAbylay Ospan  * Sony HELENE DVB-S/S2/T/T2/C/C2/ISDB-T/S tuner driver (CXD2858ER)
62dc1ed4eSAbylay Ospan  *
72dc1ed4eSAbylay Ospan  * Copyright 2012 Sony Corporation
82dc1ed4eSAbylay Ospan  * Copyright (C) 2014 NetUP Inc.
92dc1ed4eSAbylay Ospan  * Copyright (C) 2014 Abylay Ospan <aospan@netup.ru>
102dc1ed4eSAbylay Ospan   */
112dc1ed4eSAbylay Ospan 
122dc1ed4eSAbylay Ospan #ifndef __DVB_HELENE_H__
132dc1ed4eSAbylay Ospan #define __DVB_HELENE_H__
142dc1ed4eSAbylay Ospan 
152dc1ed4eSAbylay Ospan #include <linux/dvb/frontend.h>
162dc1ed4eSAbylay Ospan #include <linux/i2c.h>
172dc1ed4eSAbylay Ospan 
182dc1ed4eSAbylay Ospan enum helene_xtal {
192dc1ed4eSAbylay Ospan 	SONY_HELENE_XTAL_16000, /* 16 MHz */
202dc1ed4eSAbylay Ospan 	SONY_HELENE_XTAL_20500, /* 20.5 MHz */
212dc1ed4eSAbylay Ospan 	SONY_HELENE_XTAL_24000, /* 24 MHz */
222dc1ed4eSAbylay Ospan 	SONY_HELENE_XTAL_41000 /* 41 MHz */
232dc1ed4eSAbylay Ospan };
242dc1ed4eSAbylay Ospan 
252dc1ed4eSAbylay Ospan /**
262dc1ed4eSAbylay Ospan  * struct helene_config - the configuration of 'Helene' tuner driver
272dc1ed4eSAbylay Ospan  * @i2c_address:	I2C address of the tuner
282dc1ed4eSAbylay Ospan  * @xtal_freq_mhz:	Oscillator frequency, MHz
292dc1ed4eSAbylay Ospan  * @set_tuner_priv:	Callback function private context
302dc1ed4eSAbylay Ospan  * @set_tuner_callback:	Callback function that notifies the parent driver
312dc1ed4eSAbylay Ospan  *			which tuner is active now
32b95b0c98SMauro Carvalho Chehab  * @xtal: Cristal frequency as described by &enum helene_xtal
33817dc4b5SKatsuhiro Suzuki  * @fe: Frontend for which connects this tuner
342dc1ed4eSAbylay Ospan  */
352dc1ed4eSAbylay Ospan struct helene_config {
362dc1ed4eSAbylay Ospan 	u8	i2c_address;
372dc1ed4eSAbylay Ospan 	u8	xtal_freq_mhz;
382dc1ed4eSAbylay Ospan 	void	*set_tuner_priv;
392dc1ed4eSAbylay Ospan 	int	(*set_tuner_callback)(void *, int);
402dc1ed4eSAbylay Ospan 	enum helene_xtal xtal;
41817dc4b5SKatsuhiro Suzuki 
42817dc4b5SKatsuhiro Suzuki 	struct dvb_frontend *fe;
432dc1ed4eSAbylay Ospan };
442dc1ed4eSAbylay Ospan 
452dc1ed4eSAbylay Ospan #if IS_REACHABLE(CONFIG_DVB_HELENE)
46be9b53c8SMauro Carvalho Chehab /**
47*b0649455SMauro Carvalho Chehab  * helene_attach - Attach a helene tuner (terrestrial and cable standards)
48be9b53c8SMauro Carvalho Chehab  *
49be9b53c8SMauro Carvalho Chehab  * @fe: frontend to be attached
50be9b53c8SMauro Carvalho Chehab  * @config: pointer to &struct helene_config with tuner configuration.
51be9b53c8SMauro Carvalho Chehab  * @i2c: i2c adapter to use.
52be9b53c8SMauro Carvalho Chehab  *
53be9b53c8SMauro Carvalho Chehab  * return: FE pointer on success, NULL on failure.
54be9b53c8SMauro Carvalho Chehab  */
552dc1ed4eSAbylay Ospan extern struct dvb_frontend *helene_attach(struct dvb_frontend *fe,
562dc1ed4eSAbylay Ospan 					const struct helene_config *config,
572dc1ed4eSAbylay Ospan 					struct i2c_adapter *i2c);
58be9b53c8SMauro Carvalho Chehab 
59be9b53c8SMauro Carvalho Chehab /**
60*b0649455SMauro Carvalho Chehab  * helene_attach_s - Attach a helene tuner (satellite standards)
61be9b53c8SMauro Carvalho Chehab  *
62be9b53c8SMauro Carvalho Chehab  * @fe: frontend to be attached
63be9b53c8SMauro Carvalho Chehab  * @config: pointer to &struct helene_config with tuner configuration.
64be9b53c8SMauro Carvalho Chehab  * @i2c: i2c adapter to use.
65be9b53c8SMauro Carvalho Chehab  *
66be9b53c8SMauro Carvalho Chehab  * return: FE pointer on success, NULL on failure.
67be9b53c8SMauro Carvalho Chehab  */
68be9b53c8SMauro Carvalho Chehab extern struct dvb_frontend *helene_attach_s(struct dvb_frontend *fe,
69be9b53c8SMauro Carvalho Chehab 					const struct helene_config *config,
70be9b53c8SMauro Carvalho Chehab 					struct i2c_adapter *i2c);
712dc1ed4eSAbylay Ospan #else
722dc1ed4eSAbylay Ospan static inline struct dvb_frontend *helene_attach(struct dvb_frontend *fe,
732dc1ed4eSAbylay Ospan 					const struct helene_config *config,
742dc1ed4eSAbylay Ospan 					struct i2c_adapter *i2c)
752dc1ed4eSAbylay Ospan {
762dc1ed4eSAbylay Ospan 	pr_warn("%s: driver disabled by Kconfig\n", __func__);
772dc1ed4eSAbylay Ospan 	return NULL;
782dc1ed4eSAbylay Ospan }
792dc1ed4eSAbylay Ospan static inline struct dvb_frontend *helene_attach_s(struct dvb_frontend *fe,
802dc1ed4eSAbylay Ospan 					const struct helene_config *config,
812dc1ed4eSAbylay Ospan 					struct i2c_adapter *i2c)
822dc1ed4eSAbylay Ospan {
832dc1ed4eSAbylay Ospan 	pr_warn("%s: driver disabled by Kconfig\n", __func__);
842dc1ed4eSAbylay Ospan 	return NULL;
852dc1ed4eSAbylay Ospan }
862dc1ed4eSAbylay Ospan #endif
872dc1ed4eSAbylay Ospan 
882dc1ed4eSAbylay Ospan #endif
89