aboutsummaryrefslogtreecommitdiff
path: root/drivers/media/radio/si4713-i2c.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/radio/si4713-i2c.h')
-rw-r--r--drivers/media/radio/si4713-i2c.h66
1 files changed, 32 insertions, 34 deletions
diff --git a/drivers/media/radio/si4713-i2c.h b/drivers/media/radio/si4713-i2c.h
index c6dfa7fb101..25cdea26343 100644
--- a/drivers/media/radio/si4713-i2c.h
+++ b/drivers/media/radio/si4713-i2c.h
@@ -16,6 +16,7 @@
#define SI4713_I2C_H
#include <media/v4l2-subdev.h>
+#include <media/v4l2-ctrls.h>
#include <media/si4713.h>
#define SI4713_PRODUCT_NUMBER 0x0D
@@ -160,56 +161,33 @@
#define POWER_UP 0x01
#define POWER_DOWN 0x00
-struct rds_info {
- u32 pi;
#define MAX_RDS_PTY 31
- u32 pty;
#define MAX_RDS_DEVIATION 90000
- u32 deviation;
+
/*
* PSNAME is known to be defined as 8 character sized (RDS Spec).
* However, there is receivers which scroll PSNAME 8xN sized.
*/
#define MAX_RDS_PS_NAME 96
- u8 ps_name[MAX_RDS_PS_NAME + 1];
+
/*
* MAX_RDS_RADIO_TEXT is known to be defined as 32 (2A group) or 64 (2B group)
* character sized (RDS Spec).
* However, there is receivers which scroll them as well.
*/
#define MAX_RDS_RADIO_TEXT 384
- u8 radio_text[MAX_RDS_RADIO_TEXT + 1];
- u32 enabled;
-};
-struct limiter_info {
#define MAX_LIMITER_RELEASE_TIME 102390
- u32 release_time;
#define MAX_LIMITER_DEVIATION 90000
- u32 deviation;
- u32 enabled;
-};
-struct pilot_info {
#define MAX_PILOT_DEVIATION 90000
- u32 deviation;
#define MAX_PILOT_FREQUENCY 19000
- u32 frequency;
- u32 enabled;
-};
-struct acomp_info {
#define MAX_ACOMP_RELEASE_TIME 1000000
- u32 release_time;
#define MAX_ACOMP_ATTACK_TIME 5000
- u32 attack_time;
#define MAX_ACOMP_THRESHOLD 0
#define MIN_ACOMP_THRESHOLD (-40)
- s32 threshold;
#define MAX_ACOMP_GAIN 20
- u32 gain;
- u32 enabled;
-};
#define SI4713_NUM_SUPPLIES 2
@@ -219,21 +197,41 @@ struct acomp_info {
struct si4713_device {
/* v4l2_subdev and i2c reference (v4l2_subdev priv data) */
struct v4l2_subdev sd;
+ struct v4l2_ctrl_handler ctrl_handler;
/* private data structures */
- struct mutex mutex;
+ struct { /* si4713 control cluster */
+ /* This is one big cluster since the mute control
+ * powers off the device and after unmuting again all
+ * controls need to be set at once. The only way of doing
+ * that is by making it one big cluster. */
+ struct v4l2_ctrl *mute;
+ struct v4l2_ctrl *rds_ps_name;
+ struct v4l2_ctrl *rds_radio_text;
+ struct v4l2_ctrl *rds_pi;
+ struct v4l2_ctrl *rds_deviation;
+ struct v4l2_ctrl *rds_pty;
+ struct v4l2_ctrl *compression_enabled;
+ struct v4l2_ctrl *compression_threshold;
+ struct v4l2_ctrl *compression_gain;
+ struct v4l2_ctrl *compression_attack_time;
+ struct v4l2_ctrl *compression_release_time;
+ struct v4l2_ctrl *pilot_tone_enabled;
+ struct v4l2_ctrl *pilot_tone_freq;
+ struct v4l2_ctrl *pilot_tone_deviation;
+ struct v4l2_ctrl *limiter_enabled;
+ struct v4l2_ctrl *limiter_deviation;
+ struct v4l2_ctrl *limiter_release_time;
+ struct v4l2_ctrl *tune_preemphasis;
+ struct v4l2_ctrl *tune_pwr_level;
+ struct v4l2_ctrl *tune_ant_cap;
+ };
struct completion work;
- struct rds_info rds_info;
- struct limiter_info limiter_info;
- struct pilot_info pilot_info;
- struct acomp_info acomp_info;
struct regulator_bulk_data supplies[SI4713_NUM_SUPPLIES];
int gpio_reset;
+ u32 power_state;
+ u32 rds_enabled;
u32 frequency;
u32 preemphasis;
- u32 mute;
- u32 power_level;
- u32 power_state;
- u32 antenna_capacitor;
u32 stereo;
u32 tune_rnl;
};