// SPDX-License-Identifier: GPL-2.0-only /* * Driver for Sharp IX2505V (marked B0017) DVB-S silicon tuner * * Copyright (C) 2010 Malcolm Priestley */ #include <linux/module.h> #include <linux/dvb/frontend.h> #include <linux/slab.h> #include <linux/types.h> #include "ix2505v.h" static int ix2505v_debug; #define dprintk(level, args...) … #define deb_info(args...) … #define deb_i2c(args...) … struct ix2505v_state { … }; /* * Data read format of the Sharp IX2505V B0017 * * byte1: 1 | 1 | 0 | 0 | 0 | MA1 | MA0 | 1 * byte2: POR | FL | RD2 | RD1 | RD0 | X | X | X * * byte1 = address * byte2; * POR = Power on Reset (VCC H=<2.2v L=>2.2v) * FL = Phase Lock (H=lock L=unlock) * RD0-2 = Reserved internal operations * * Only POR can be used to check the tuner is present * * Caution: after byte2 the I2C reverts to write mode continuing to read * may corrupt tuning data. * */ static int ix2505v_read_status_reg(struct ix2505v_state *state) { … } static int ix2505v_write(struct ix2505v_state *state, u8 buf[], u8 count) { … } static void ix2505v_release(struct dvb_frontend *fe) { … } /* * Data write format of the Sharp IX2505V B0017 * * byte1: 1 | 1 | 0 | 0 | 0 | 0(MA1)| 0(MA0)| 0 * byte2: 0 | BG1 | BG2 | N8 | N7 | N6 | N5 | N4 * byte3: N3 | N2 | N1 | A5 | A4 | A3 | A2 | A1 * byte4: 1 | 1(C1) | 1(C0) | PD5 | PD4 | TM | 0(RTS)| 1(REF) * byte5: BA2 | BA1 | BA0 | PSC | PD3 |PD2/TS2|DIV/TS1|PD0/TS0 * * byte1 = address * * Write order * 1) byte1 -> byte2 -> byte3 -> byte4 -> byte5 * 2) byte1 -> byte4 -> byte5 -> byte2 -> byte3 * 3) byte1 -> byte2 -> byte3 -> byte4 * 4) byte1 -> byte4 -> byte5 -> byte2 * 5) byte1 -> byte2 -> byte3 * 6) byte1 -> byte4 -> byte5 * 7) byte1 -> byte2 * 8) byte1 -> byte4 * * Recommended Setup * 1 -> 8 -> 6 */ static int ix2505v_set_params(struct dvb_frontend *fe) { … } static int ix2505v_get_frequency(struct dvb_frontend *fe, u32 *frequency) { … } static const struct dvb_tuner_ops ix2505v_tuner_ops = …; struct dvb_frontend *ix2505v_attach(struct dvb_frontend *fe, const struct ix2505v_config *config, struct i2c_adapter *i2c) { … } EXPORT_SYMBOL_GPL(…); module_param_named(debug, ix2505v_debug, int, 0644); MODULE_PARM_DESC(…) …; MODULE_DESCRIPTION(…) …; MODULE_AUTHOR(…) …; MODULE_LICENSE(…) …;