18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * helene.h
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Sony HELENE DVB-S/S2/T/T2/C/C2/ISDB-T/S tuner driver (CXD2858ER)
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * Copyright 2012 Sony Corporation
88c2ecf20Sopenharmony_ci * Copyright (C) 2014 NetUP Inc.
98c2ecf20Sopenharmony_ci * Copyright (C) 2014 Abylay Ospan <aospan@netup.ru>
108c2ecf20Sopenharmony_ci  */
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#ifndef __DVB_HELENE_H__
138c2ecf20Sopenharmony_ci#define __DVB_HELENE_H__
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#include <linux/dvb/frontend.h>
168c2ecf20Sopenharmony_ci#include <linux/i2c.h>
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_cienum helene_xtal {
198c2ecf20Sopenharmony_ci	SONY_HELENE_XTAL_16000, /* 16 MHz */
208c2ecf20Sopenharmony_ci	SONY_HELENE_XTAL_20500, /* 20.5 MHz */
218c2ecf20Sopenharmony_ci	SONY_HELENE_XTAL_24000, /* 24 MHz */
228c2ecf20Sopenharmony_ci	SONY_HELENE_XTAL_41000 /* 41 MHz */
238c2ecf20Sopenharmony_ci};
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci/**
268c2ecf20Sopenharmony_ci * struct helene_config - the configuration of 'Helene' tuner driver
278c2ecf20Sopenharmony_ci * @i2c_address:	I2C address of the tuner
288c2ecf20Sopenharmony_ci * @xtal_freq_mhz:	Oscillator frequency, MHz
298c2ecf20Sopenharmony_ci * @set_tuner_priv:	Callback function private context
308c2ecf20Sopenharmony_ci * @set_tuner_callback:	Callback function that notifies the parent driver
318c2ecf20Sopenharmony_ci *			which tuner is active now
328c2ecf20Sopenharmony_ci * @xtal: Cristal frequency as described by &enum helene_xtal
338c2ecf20Sopenharmony_ci * @fe: Frontend for which connects this tuner
348c2ecf20Sopenharmony_ci */
358c2ecf20Sopenharmony_cistruct helene_config {
368c2ecf20Sopenharmony_ci	u8	i2c_address;
378c2ecf20Sopenharmony_ci	u8	xtal_freq_mhz;
388c2ecf20Sopenharmony_ci	void	*set_tuner_priv;
398c2ecf20Sopenharmony_ci	int	(*set_tuner_callback)(void *, int);
408c2ecf20Sopenharmony_ci	enum helene_xtal xtal;
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci	struct dvb_frontend *fe;
438c2ecf20Sopenharmony_ci};
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci#if IS_REACHABLE(CONFIG_DVB_HELENE)
468c2ecf20Sopenharmony_ci/**
478c2ecf20Sopenharmony_ci * Attach a helene tuner (terrestrial and cable standards)
488c2ecf20Sopenharmony_ci *
498c2ecf20Sopenharmony_ci * @fe: frontend to be attached
508c2ecf20Sopenharmony_ci * @config: pointer to &struct helene_config with tuner configuration.
518c2ecf20Sopenharmony_ci * @i2c: i2c adapter to use.
528c2ecf20Sopenharmony_ci *
538c2ecf20Sopenharmony_ci * return: FE pointer on success, NULL on failure.
548c2ecf20Sopenharmony_ci */
558c2ecf20Sopenharmony_ciextern struct dvb_frontend *helene_attach(struct dvb_frontend *fe,
568c2ecf20Sopenharmony_ci					const struct helene_config *config,
578c2ecf20Sopenharmony_ci					struct i2c_adapter *i2c);
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ci/**
608c2ecf20Sopenharmony_ci * Attach a helene tuner (satellite standards)
618c2ecf20Sopenharmony_ci *
628c2ecf20Sopenharmony_ci * @fe: frontend to be attached
638c2ecf20Sopenharmony_ci * @config: pointer to &struct helene_config with tuner configuration.
648c2ecf20Sopenharmony_ci * @i2c: i2c adapter to use.
658c2ecf20Sopenharmony_ci *
668c2ecf20Sopenharmony_ci * return: FE pointer on success, NULL on failure.
678c2ecf20Sopenharmony_ci */
688c2ecf20Sopenharmony_ciextern struct dvb_frontend *helene_attach_s(struct dvb_frontend *fe,
698c2ecf20Sopenharmony_ci					const struct helene_config *config,
708c2ecf20Sopenharmony_ci					struct i2c_adapter *i2c);
718c2ecf20Sopenharmony_ci#else
728c2ecf20Sopenharmony_cistatic inline struct dvb_frontend *helene_attach(struct dvb_frontend *fe,
738c2ecf20Sopenharmony_ci					const struct helene_config *config,
748c2ecf20Sopenharmony_ci					struct i2c_adapter *i2c)
758c2ecf20Sopenharmony_ci{
768c2ecf20Sopenharmony_ci	pr_warn("%s: driver disabled by Kconfig\n", __func__);
778c2ecf20Sopenharmony_ci	return NULL;
788c2ecf20Sopenharmony_ci}
798c2ecf20Sopenharmony_cistatic inline struct dvb_frontend *helene_attach_s(struct dvb_frontend *fe,
808c2ecf20Sopenharmony_ci					const struct helene_config *config,
818c2ecf20Sopenharmony_ci					struct i2c_adapter *i2c)
828c2ecf20Sopenharmony_ci{
838c2ecf20Sopenharmony_ci	pr_warn("%s: driver disabled by Kconfig\n", __func__);
848c2ecf20Sopenharmony_ci	return NULL;
858c2ecf20Sopenharmony_ci}
868c2ecf20Sopenharmony_ci#endif
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_ci#endif
89