1c942fddfSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
2a5d32b35SKozlov Sergey /*
3a5d32b35SKozlov Sergey  * horus3a.h
4a5d32b35SKozlov Sergey  *
5a5d32b35SKozlov Sergey  * Sony Horus3A DVB-S/S2 tuner driver
6a5d32b35SKozlov Sergey  *
7a5d32b35SKozlov Sergey  * Copyright 2012 Sony Corporation
8a5d32b35SKozlov Sergey  * Copyright (C) 2014 NetUP Inc.
9a5d32b35SKozlov Sergey  * Copyright (C) 2014 Sergey Kozlov <serjk@netup.ru>
10a5d32b35SKozlov Sergey  * Copyright (C) 2014 Abylay Ospan <aospan@netup.ru>
11a5d32b35SKozlov Sergey   */
12a5d32b35SKozlov Sergey 
13a5d32b35SKozlov Sergey #ifndef __DVB_HORUS3A_H__
14a5d32b35SKozlov Sergey #define __DVB_HORUS3A_H__
15a5d32b35SKozlov Sergey 
16a5d32b35SKozlov Sergey #include <linux/dvb/frontend.h>
17a5d32b35SKozlov Sergey #include <linux/i2c.h>
18a5d32b35SKozlov Sergey 
19a5d32b35SKozlov Sergey /**
20a5d32b35SKozlov Sergey  * struct horus3a_config - the configuration of Horus3A tuner driver
21a5d32b35SKozlov Sergey  * @i2c_address:    I2C address of the tuner
22a5d32b35SKozlov Sergey  * @xtal_freq_mhz:  Oscillator frequency, MHz
23a5d32b35SKozlov Sergey  * @set_tuner_priv: Callback function private context
24a5d32b35SKozlov Sergey  * @set_tuner_callback: Callback function that notifies the parent driver
25a5d32b35SKozlov Sergey  *          which tuner is active now
26a5d32b35SKozlov Sergey  */
27a5d32b35SKozlov Sergey struct horus3a_config {
28a5d32b35SKozlov Sergey 	u8	i2c_address;
29a5d32b35SKozlov Sergey 	u8	xtal_freq_mhz;
30a5d32b35SKozlov Sergey 	void	*set_tuner_priv;
31a5d32b35SKozlov Sergey 	int	(*set_tuner_callback)(void *, int);
32a5d32b35SKozlov Sergey };
33a5d32b35SKozlov Sergey 
34a5d32b35SKozlov Sergey #if IS_REACHABLE(CONFIG_DVB_HORUS3A)
35be9b53c8SMauro Carvalho Chehab /**
36*b0649455SMauro Carvalho Chehab  * horus3a_attach - Attach a horus3a tuner
37be9b53c8SMauro Carvalho Chehab  *
38be9b53c8SMauro Carvalho Chehab  * @fe: frontend to be attached
39be9b53c8SMauro Carvalho Chehab  * @config: pointer to &struct helene_config with tuner configuration.
40be9b53c8SMauro Carvalho Chehab  * @i2c: i2c adapter to use.
41be9b53c8SMauro Carvalho Chehab  *
42be9b53c8SMauro Carvalho Chehab  * return: FE pointer on success, NULL on failure.
43be9b53c8SMauro Carvalho Chehab  */
44a5d32b35SKozlov Sergey extern struct dvb_frontend *horus3a_attach(struct dvb_frontend *fe,
45a5d32b35SKozlov Sergey 					const struct horus3a_config *config,
46a5d32b35SKozlov Sergey 					struct i2c_adapter *i2c);
47a5d32b35SKozlov Sergey #else
horus3a_attach(struct dvb_frontend * fe,const struct horus3a_config * config,struct i2c_adapter * i2c)48ebdd4b7eSJavier Martinez Canillas static inline struct dvb_frontend *horus3a_attach(struct dvb_frontend *fe,
49ebdd4b7eSJavier Martinez Canillas 					const struct horus3a_config *config,
50a5d32b35SKozlov Sergey 					struct i2c_adapter *i2c)
51a5d32b35SKozlov Sergey {
52a5d32b35SKozlov Sergey 	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
53a5d32b35SKozlov Sergey 	return NULL;
54a5d32b35SKozlov Sergey }
55a5d32b35SKozlov Sergey #endif
56a5d32b35SKozlov Sergey 
57a5d32b35SKozlov Sergey #endif
58