18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci *    Support for LG2160 - ATSC/MH
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci *    Copyright (C) 2010 Michael Krufky <mkrufky@linuxtv.org>
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef _LG2160_H_
98c2ecf20Sopenharmony_ci#define _LG2160_H_
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#include <linux/i2c.h>
128c2ecf20Sopenharmony_ci#include <media/dvb_frontend.h>
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_cienum lg_chip_type {
158c2ecf20Sopenharmony_ci	LG2160 = 0,
168c2ecf20Sopenharmony_ci	LG2161 = 1,
178c2ecf20Sopenharmony_ci};
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci#define LG2161_1019 LG2161
208c2ecf20Sopenharmony_ci#define LG2161_1040 LG2161
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_cienum lg2160_spi_clock {
238c2ecf20Sopenharmony_ci	LG2160_SPI_3_125_MHZ = 0,
248c2ecf20Sopenharmony_ci	LG2160_SPI_6_25_MHZ = 1,
258c2ecf20Sopenharmony_ci	LG2160_SPI_12_5_MHZ = 2,
268c2ecf20Sopenharmony_ci};
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci#if 0
298c2ecf20Sopenharmony_cienum lg2161_oif {
308c2ecf20Sopenharmony_ci	LG2161_OIF_EBI2_SLA  = 1,
318c2ecf20Sopenharmony_ci	LG2161_OIF_SDIO_SLA  = 2,
328c2ecf20Sopenharmony_ci	LG2161_OIF_SPI_SLA   = 3,
338c2ecf20Sopenharmony_ci	LG2161_OIF_SPI_MAS   = 4,
348c2ecf20Sopenharmony_ci	LG2161_OIF_SERIAL_TS = 7,
358c2ecf20Sopenharmony_ci};
368c2ecf20Sopenharmony_ci#endif
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_cistruct lg2160_config {
398c2ecf20Sopenharmony_ci	u8 i2c_addr;
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci	/* user defined IF frequency in KHz */
428c2ecf20Sopenharmony_ci	u16 if_khz;
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci	/* disable i2c repeater - 0:repeater enabled 1:repeater disabled */
458c2ecf20Sopenharmony_ci	unsigned int deny_i2c_rptr:1;
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci	/* spectral inversion - 0:disabled 1:enabled */
488c2ecf20Sopenharmony_ci	unsigned int spectral_inversion:1;
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ci	unsigned int output_if;
518c2ecf20Sopenharmony_ci	enum lg2160_spi_clock spi_clock;
528c2ecf20Sopenharmony_ci	enum lg_chip_type lg_chip;
538c2ecf20Sopenharmony_ci};
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci#if IS_REACHABLE(CONFIG_DVB_LG2160)
568c2ecf20Sopenharmony_ciextern
578c2ecf20Sopenharmony_cistruct dvb_frontend *lg2160_attach(const struct lg2160_config *config,
588c2ecf20Sopenharmony_ci				     struct i2c_adapter *i2c_adap);
598c2ecf20Sopenharmony_ci#else
608c2ecf20Sopenharmony_cistatic inline
618c2ecf20Sopenharmony_cistruct dvb_frontend *lg2160_attach(const struct lg2160_config *config,
628c2ecf20Sopenharmony_ci				     struct i2c_adapter *i2c_adap)
638c2ecf20Sopenharmony_ci{
648c2ecf20Sopenharmony_ci	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
658c2ecf20Sopenharmony_ci	return NULL;
668c2ecf20Sopenharmony_ci}
678c2ecf20Sopenharmony_ci#endif /* CONFIG_DVB_LG2160 */
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_ci#endif /* _LG2160_H_ */
70