diff options
Diffstat (limited to 'extras/recipes-kernel/linux/linux-omap/wl1271/0007-drivers-media-radio-wl128x-FM-Driver-common-header-f.patch')
-rw-r--r-- | extras/recipes-kernel/linux/linux-omap/wl1271/0007-drivers-media-radio-wl128x-FM-Driver-common-header-f.patch | 268 |
1 files changed, 268 insertions, 0 deletions
diff --git a/extras/recipes-kernel/linux/linux-omap/wl1271/0007-drivers-media-radio-wl128x-FM-Driver-common-header-f.patch b/extras/recipes-kernel/linux/linux-omap/wl1271/0007-drivers-media-radio-wl128x-FM-Driver-common-header-f.patch new file mode 100644 index 00000000..d104a727 --- /dev/null +++ b/extras/recipes-kernel/linux/linux-omap/wl1271/0007-drivers-media-radio-wl128x-FM-Driver-common-header-f.patch @@ -0,0 +1,268 @@ +From f568ec9bb6ccd1e17278dcab3fbc810cf2e071ac Mon Sep 17 00:00:00 2001 +From: Manjunatha Halli <manjunatha_halli@ti.com> +Date: Tue, 11 Jan 2011 11:31:21 +0000 +Subject: [PATCH 07/15] drivers:media:radio: wl128x: FM Driver common header file + +These are common headers used in FM submodules (FM V4L2, +FM common, FM Rx,and FM TX). + +Signed-off-by: Manjunatha Halli <manjunatha_halli@ti.com> +Reviewed-by: Hans Verkuil <hverkuil@xs4all.nl> +--- + drivers/media/radio/wl128x/fmdrv.h | 244 ++++++++++++++++++++++++++++++++++++ + 1 files changed, 244 insertions(+), 0 deletions(-) + create mode 100644 drivers/media/radio/wl128x/fmdrv.h + +diff --git a/drivers/media/radio/wl128x/fmdrv.h b/drivers/media/radio/wl128x/fmdrv.h +new file mode 100644 +index 0000000..392b62d +--- /dev/null ++++ b/drivers/media/radio/wl128x/fmdrv.h +@@ -0,0 +1,244 @@ ++/* ++ * FM Driver for Connectivity chip of Texas Instruments. ++ * ++ * Common header for all FM driver sub-modules. ++ * ++ * Copyright (C) 2011 Texas Instruments ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ * ++ */ ++ ++#ifndef _FM_DRV_H ++#define _FM_DRV_H ++ ++#include <linux/skbuff.h> ++#include <linux/interrupt.h> ++#include <sound/core.h> ++#include <sound/initval.h> ++#include <linux/timer.h> ++#include <linux/version.h> ++#include <media/v4l2-ioctl.h> ++#include <media/v4l2-common.h> ++#include <media/v4l2-ctrls.h> ++ ++#define FM_DRV_VERSION "0.09" ++/* Should match with FM_DRV_VERSION */ ++#define FM_DRV_RADIO_VERSION KERNEL_VERSION(0, 0, 1) ++#define FM_DRV_NAME "ti_fmdrv" ++#define FM_DRV_CARD_SHORT_NAME "TI FM Radio" ++#define FM_DRV_CARD_LONG_NAME "Texas Instruments FM Radio" ++ ++/* Flag info */ ++#define FM_INTTASK_RUNNING 0 ++#define FM_INTTASK_SCHEDULE_PENDING 1 ++#define FM_FW_DW_INPROGRESS 2 ++#define FM_CORE_READY 3 ++#define FM_CORE_TRANSPORT_READY 4 ++#define FM_AF_SWITCH_INPROGRESS 5 ++#define FM_CORE_TX_XMITING 6 ++ ++#define FM_TUNE_COMPLETE 0x1 ++#define FM_BAND_LIMIT 0x2 ++ ++#define FM_DRV_TX_TIMEOUT (5*HZ) /* 5 seconds */ ++#define FM_DRV_RX_SEEK_TIMEOUT (20*HZ) /* 20 seconds */ ++ ++#define NO_OF_ENTRIES_IN_ARRAY(array) (sizeof(array) / sizeof(array[0])) ++ ++#define fmerr(format, ...) \ ++ printk(KERN_ERR "fmdrv: " format, ## __VA_ARGS__) ++#define fmwarn(format, ...) \ ++ printk(KERN_WARNING "fmdrv: " format, ##__VA_ARGS__) ++#ifdef DEBUG ++#define fmdbg(format, ...) \ ++ printk(KERN_DEBUG "fmdrv: " format, ## __VA_ARGS__) ++#else /* DEBUG */ ++#define fmdbg(format, ...) ++#endif ++enum { ++ FM_MODE_OFF, ++ FM_MODE_TX, ++ FM_MODE_RX, ++ FM_MODE_ENTRY_MAX ++}; ++ ++#define FM_RX_RDS_INFO_FIELD_MAX 8 /* 4 Group * 2 Bytes */ ++ ++/* RX RDS data format */ ++struct fm_rdsdata_format { ++ union { ++ struct { ++ u8 buff[FM_RX_RDS_INFO_FIELD_MAX]; ++ } groupdatabuff; ++ struct { ++ u16 pidata; ++ u8 blk_b[2]; ++ u8 blk_c[2]; ++ u8 blk_d[2]; ++ } groupgeneral; ++ struct { ++ u16 pidata; ++ u8 blk_b[2]; ++ u8 af[2]; ++ u8 ps[2]; ++ } group0A; ++ struct { ++ u16 pi[2]; ++ u8 blk_b[2]; ++ u8 ps[2]; ++ } group0B; ++ } data; ++}; ++ ++/* FM region (Europe/US, Japan) info */ ++struct region_info { ++ u32 chanl_space; ++ u32 bot_freq; ++ u32 top_freq; ++ u8 fm_band; ++}; ++struct fmdev; ++typedef void (*int_handler_prototype) (struct fmdev *); ++ ++/* FM Interrupt processing related info */ ++struct fm_irq { ++ u8 stage; ++ u16 flag; /* FM interrupt flag */ ++ u16 mask; /* FM interrupt mask */ ++ /* Interrupt process timeout handler */ ++ struct timer_list timer; ++ u8 retry; ++ int_handler_prototype *handlers; ++}; ++ ++/* RDS info */ ++struct fm_rds { ++ u8 flag; /* RX RDS on/off status */ ++ u8 last_blk_idx; /* Last received RDS block */ ++ ++ /* RDS buffer */ ++ wait_queue_head_t read_queue; ++ u32 buf_size; /* Size is always multiple of 3 */ ++ u32 wr_idx; ++ u32 rd_idx; ++ u8 *buff; ++}; ++ ++#define FM_RDS_MAX_AF_LIST 25 ++ ++/* ++ * Current RX channel Alternate Frequency cache. ++ * This info is used to switch to other freq (AF) ++ * when current channel signal strengh is below RSSI threshold. ++ */ ++struct tuned_station_info { ++ u16 picode; ++ u32 af_cache[FM_RDS_MAX_AF_LIST]; ++ u8 afcache_size; ++ u8 af_list_max; ++}; ++ ++/* FM RX mode info */ ++struct fm_rx { ++ struct region_info region; /* Current selected band */ ++ u32 freq; /* Current RX frquency */ ++ u8 mute_mode; /* Current mute mode */ ++ u8 deemphasis_mode; /* Current deemphasis mode */ ++ /* RF dependent soft mute mode */ ++ u8 rf_depend_mute; ++ u16 volume; /* Current volume level */ ++ u16 rssi_threshold; /* Current RSSI threshold level */ ++ /* Holds the index of the current AF jump */ ++ u8 afjump_idx; ++ /* Will hold the frequency before the jump */ ++ u32 freq_before_jump; ++ u8 rds_mode; /* RDS operation mode (RDS/RDBS) */ ++ u8 af_mode; /* Alternate frequency on/off */ ++ struct tuned_station_info stat_info; ++ struct fm_rds rds; ++}; ++ ++#define FMTX_RDS_TXT_STR_SIZE 25 ++/* ++ * FM TX RDS data ++ * ++ * @ text_type: is the text following PS or RT ++ * @ text: radio text string which could either be PS or RT ++ * @ af_freq: alternate frequency for Tx ++ * TODO: to be declared in application ++ */ ++struct tx_rds { ++ u8 text_type; ++ u8 text[FMTX_RDS_TXT_STR_SIZE]; ++ u8 flag; ++ u32 af_freq; ++}; ++/* ++ * FM TX global data ++ * ++ * @ pwr_lvl: Power Level of the Transmission from mixer control ++ * @ xmit_state: Transmission state = Updated locally upon Start/Stop ++ * @ audio_io: i2S/Analog ++ * @ tx_frq: Transmission frequency ++ */ ++struct fmtx_data { ++ u8 pwr_lvl; ++ u8 xmit_state; ++ u8 audio_io; ++ u8 region; ++ u16 aud_mode; ++ u32 preemph; ++ u32 tx_frq; ++ struct tx_rds rds; ++}; ++ ++/* FM driver operation structure */ ++struct fmdev { ++ struct video_device *radio_dev; /* V4L2 video device pointer */ ++ struct snd_card *card; /* Card which holds FM mixer controls */ ++ u16 asci_id; ++ spinlock_t rds_buff_lock; /* To protect access to RDS buffer */ ++ spinlock_t resp_skb_lock; /* To protect access to received SKB */ ++ ++ long flag; /* FM driver state machine info */ ++ u8 streg_cbdata; /* status of ST registration */ ++ ++ struct sk_buff_head rx_q; /* RX queue */ ++ struct tasklet_struct rx_task; /* RX Tasklet */ ++ ++ struct sk_buff_head tx_q; /* TX queue */ ++ struct tasklet_struct tx_task; /* TX Tasklet */ ++ unsigned long last_tx_jiffies; /* Timestamp of last pkt sent */ ++ atomic_t tx_cnt; /* Number of packets can send at a time */ ++ ++ struct sk_buff *resp_skb; /* Response from the chip */ ++ /* Main task completion handler */ ++ struct completion maintask_comp; ++ /* Opcode of last command sent to the chip */ ++ u8 pre_op; ++ /* Handler used for wakeup when response packet is received */ ++ struct completion *resp_comp; ++ struct fm_irq irq_info; ++ u8 curr_fmmode; /* Current FM chip mode (TX, RX, OFF) */ ++ struct fm_rx rx; /* FM receiver info */ ++ struct fmtx_data tx_data; ++ ++ /* V4L2 ctrl framwork handler*/ ++ struct v4l2_ctrl_handler ctrl_handler; ++ ++ /* For core assisted locking */ ++ struct mutex mutex; ++}; ++#endif +-- +1.6.6.1 + |