1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 STB6100 Silicon Tuner 4 Copyright (C) Manu Abraham (abraham.manu@gmail.com) 5 6 Copyright (C) ST Microelectronics 7 8 */ 9 10 #include <linux/dvb/frontend.h> 11 #include <media/dvb_frontend.h> 12 13 static int stb6100_get_frequency(struct dvb_frontend *fe, u32 *frequency) 14 { 15 struct dvb_frontend_ops *frontend_ops = &fe->ops; 16 struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; 17 int err = 0; 18 19 if (tuner_ops->get_frequency) { 20 err = tuner_ops->get_frequency(fe, frequency); 21 if (err < 0) { 22 printk("%s: Invalid parameter\n", __func__); 23 return err; 24 } 25 } 26 return 0; 27 } 28 29 static int stb6100_set_frequency(struct dvb_frontend *fe, u32 frequency) 30 { 31 struct dvb_frontend_ops *frontend_ops = &fe->ops; 32 struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; 33 struct dtv_frontend_properties *c = &fe->dtv_property_cache; 34 u32 bw = c->bandwidth_hz; 35 int err = 0; 36 37 c->frequency = frequency; 38 c->bandwidth_hz = 0; /* Don't adjust the bandwidth */ 39 40 if (tuner_ops->set_params) { 41 err = tuner_ops->set_params(fe); 42 c->bandwidth_hz = bw; 43 if (err < 0) { 44 printk("%s: Invalid parameter\n", __func__); 45 return err; 46 } 47 } 48 return 0; 49 } 50 51 static int stb6100_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth) 52 { 53 struct dvb_frontend_ops *frontend_ops = &fe->ops; 54 struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; 55 int err = 0; 56 57 if (tuner_ops->get_bandwidth) { 58 err = tuner_ops->get_bandwidth(fe, bandwidth); 59 if (err < 0) { 60 printk("%s: Invalid parameter\n", __func__); 61 return err; 62 } 63 } 64 return 0; 65 } 66 67 static int stb6100_set_bandwidth(struct dvb_frontend *fe, u32 bandwidth) 68 { 69 struct dvb_frontend_ops *frontend_ops = &fe->ops; 70 struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; 71 struct dtv_frontend_properties *c = &fe->dtv_property_cache; 72 u32 freq = c->frequency; 73 int err = 0; 74 75 c->bandwidth_hz = bandwidth; 76 c->frequency = 0; /* Don't adjust the frequency */ 77 78 if (tuner_ops->set_params) { 79 err = tuner_ops->set_params(fe); 80 c->frequency = freq; 81 if (err < 0) { 82 printk("%s: Invalid parameter\n", __func__); 83 return err; 84 } 85 } 86 return 0; 87 } 88