/* si4713_g_frequency - get tuner or modulator radio frequency */ static int si4713_g_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *f) { struct si4713_device *sdev = to_si4713_device(sd); int rval = 0; f->type = V4L2_TUNER_RADIO; mutex_lock(&sdev->mutex); if (sdev->power_state) { u16 freq; u8 p, a, n; rval = si4713_tx_tune_status(sdev, 0x00, &freq, &p, &a, &n); if (rval < 0) goto unlock; sdev->frequency = freq; } f->frequency = si4713_to_v4l2(sdev->frequency); unlock: mutex_unlock(&sdev->mutex); return rval; }
static int si4713_update_tune_status(struct si4713_device *sdev) { int rval; u16 f = 0; u8 p = 0, a = 0, n = 0; rval = si4713_tx_tune_status(sdev, 0x00, &f, &p, &a, &n); if (rval < 0) goto exit; sdev->power_level = p; sdev->antenna_capacitor = a; sdev->tune_rnl = n; exit: return rval; }
/* * si4713_update_tune_status - update properties from tx_tune_status * command. Must be called with sdev->mutex held. * @sdev: si4713_device structure for the device we are communicating */ static int si4713_update_tune_status(struct si4713_device *sdev) { int rval; u16 f = 0; u8 p = 0, a = 0, n = 0; rval = si4713_tx_tune_status(sdev, 0x00, &f, &p, &a, &n); if (rval < 0) goto exit; /* TODO: check that power_level and antenna_capacitor really are not changed by the hardware. If they are, then these controls should become volatiles. sdev->power_level = p; sdev->antenna_capacitor = a;*/ sdev->tune_rnl = n; exit: return rval; }
/* si4713_g_frequency - get tuner or modulator radio frequency */ static int si4713_g_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *f) { struct si4713_device *sdev = to_si4713_device(sd); int rval = 0; if (f->tuner) return -EINVAL; if (sdev->power_state) { u16 freq; u8 p, a, n; rval = si4713_tx_tune_status(sdev, 0x00, &freq, &p, &a, &n); if (rval < 0) return rval; sdev->frequency = freq; } f->frequency = si4713_to_v4l2(sdev->frequency); return rval; }