diff options
Diffstat (limited to 'extras/recipes-kernel/linux/linux-omap/wl1271/0011-drivers-media-radio-wl128x-FM-driver-TX-sources.patch')
-rw-r--r-- | extras/recipes-kernel/linux/linux-omap/wl1271/0011-drivers-media-radio-wl128x-FM-driver-TX-sources.patch | 494 |
1 files changed, 494 insertions, 0 deletions
diff --git a/extras/recipes-kernel/linux/linux-omap/wl1271/0011-drivers-media-radio-wl128x-FM-driver-TX-sources.patch b/extras/recipes-kernel/linux/linux-omap/wl1271/0011-drivers-media-radio-wl128x-FM-driver-TX-sources.patch new file mode 100644 index 00000000..52b409f8 --- /dev/null +++ b/extras/recipes-kernel/linux/linux-omap/wl1271/0011-drivers-media-radio-wl128x-FM-driver-TX-sources.patch | |||
@@ -0,0 +1,494 @@ | |||
1 | From 87d399bad67bdff67c1601fbb8e54deb5e0cf7e0 Mon Sep 17 00:00:00 2001 | ||
2 | From: Manjunatha Halli <manjunatha_halli@ti.com> | ||
3 | Date: Tue, 11 Jan 2011 11:31:25 +0000 | ||
4 | Subject: [PATCH 11/15] drivers:media:radio: wl128x: FM driver TX sources | ||
5 | |||
6 | This has implementation for FM TX functionality. | ||
7 | It communicates with FM V4l2 module and FM common module. | ||
8 | |||
9 | Signed-off-by: Manjunatha Halli <manjunatha_halli@ti.com> | ||
10 | Reviewed-by: Hans Verkuil <hverkuil@xs4all.nl> | ||
11 | --- | ||
12 | drivers/media/radio/wl128x/fmdrv_tx.c | 425 +++++++++++++++++++++++++++++++++ | ||
13 | drivers/media/radio/wl128x/fmdrv_tx.h | 37 +++ | ||
14 | 2 files changed, 462 insertions(+), 0 deletions(-) | ||
15 | create mode 100644 drivers/media/radio/wl128x/fmdrv_tx.c | ||
16 | create mode 100644 drivers/media/radio/wl128x/fmdrv_tx.h | ||
17 | |||
18 | diff --git a/drivers/media/radio/wl128x/fmdrv_tx.c b/drivers/media/radio/wl128x/fmdrv_tx.c | ||
19 | new file mode 100644 | ||
20 | index 0000000..be54068 | ||
21 | --- /dev/null | ||
22 | +++ b/drivers/media/radio/wl128x/fmdrv_tx.c | ||
23 | @@ -0,0 +1,425 @@ | ||
24 | +/* | ||
25 | + * FM Driver for Connectivity chip of Texas Instruments. | ||
26 | + * This sub-module of FM driver implements FM TX functionality. | ||
27 | + * | ||
28 | + * Copyright (C) 2011 Texas Instruments | ||
29 | + * | ||
30 | + * This program is free software; you can redistribute it and/or modify | ||
31 | + * it under the terms of the GNU General Public License version 2 as | ||
32 | + * published by the Free Software Foundation. | ||
33 | + * | ||
34 | + * This program is distributed in the hope that it will be useful, | ||
35 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
36 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
37 | + * GNU General Public License for more details. | ||
38 | + * | ||
39 | + * You should have received a copy of the GNU General Public License | ||
40 | + * along with this program; if not, write to the Free Software | ||
41 | + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
42 | + * | ||
43 | + */ | ||
44 | + | ||
45 | +#include <linux/delay.h> | ||
46 | +#include "fmdrv.h" | ||
47 | +#include "fmdrv_common.h" | ||
48 | +#include "fmdrv_tx.h" | ||
49 | + | ||
50 | +u32 fm_tx_set_stereo_mono(struct fmdev *fmdev, u16 mode) | ||
51 | +{ | ||
52 | + u16 payload; | ||
53 | + u32 ret; | ||
54 | + | ||
55 | + if (fmdev->tx_data.aud_mode == mode) | ||
56 | + return 0; | ||
57 | + | ||
58 | + fmdbg("stereo mode: %d\n", mode); | ||
59 | + | ||
60 | + /* Set Stereo/Mono mode */ | ||
61 | + payload = (1 - mode); | ||
62 | + ret = fmc_send_cmd(fmdev, MONO_SET, REG_WR, &payload, | ||
63 | + sizeof(payload), NULL, NULL); | ||
64 | + if (ret < 0) | ||
65 | + return ret; | ||
66 | + | ||
67 | + fmdev->tx_data.aud_mode = mode; | ||
68 | + | ||
69 | + return ret; | ||
70 | +} | ||
71 | + | ||
72 | +static u32 set_rds_text(struct fmdev *fmdev, u8 *rds_text) | ||
73 | +{ | ||
74 | + u16 payload; | ||
75 | + u32 ret; | ||
76 | + | ||
77 | + ret = fmc_send_cmd(fmdev, RDS_DATA_SET, REG_WR, rds_text, | ||
78 | + strlen(rds_text), NULL, NULL); | ||
79 | + if (ret < 0) | ||
80 | + return ret; | ||
81 | + | ||
82 | + /* Scroll mode */ | ||
83 | + payload = (u16)0x1; | ||
84 | + ret = fmc_send_cmd(fmdev, DISPLAY_MODE, REG_WR, &payload, | ||
85 | + sizeof(payload), NULL, NULL); | ||
86 | + if (ret < 0) | ||
87 | + return ret; | ||
88 | + | ||
89 | + return 0; | ||
90 | +} | ||
91 | + | ||
92 | +static u32 set_rds_data_mode(struct fmdev *fmdev, u8 mode) | ||
93 | +{ | ||
94 | + u16 payload; | ||
95 | + u32 ret; | ||
96 | + | ||
97 | + /* Setting unique PI TODO: how unique? */ | ||
98 | + payload = (u16)0xcafe; | ||
99 | + ret = fmc_send_cmd(fmdev, PI_SET, REG_WR, &payload, | ||
100 | + sizeof(payload), NULL, NULL); | ||
101 | + if (ret < 0) | ||
102 | + return ret; | ||
103 | + | ||
104 | + /* Set decoder id */ | ||
105 | + payload = (u16)0xa; | ||
106 | + ret = fmc_send_cmd(fmdev, DI_SET, REG_WR, &payload, | ||
107 | + sizeof(payload), NULL, NULL); | ||
108 | + if (ret < 0) | ||
109 | + return ret; | ||
110 | + | ||
111 | + /* TODO: RDS_MODE_GET? */ | ||
112 | + return 0; | ||
113 | +} | ||
114 | + | ||
115 | +static u32 set_rds_len(struct fmdev *fmdev, u8 type, u16 len) | ||
116 | +{ | ||
117 | + u16 payload; | ||
118 | + u32 ret; | ||
119 | + | ||
120 | + len |= type << 8; | ||
121 | + payload = len; | ||
122 | + ret = fmc_send_cmd(fmdev, RDS_CONFIG_DATA_SET, REG_WR, &payload, | ||
123 | + sizeof(payload), NULL, NULL); | ||
124 | + if (ret < 0) | ||
125 | + return ret; | ||
126 | + | ||
127 | + /* TODO: LENGTH_GET? */ | ||
128 | + return 0; | ||
129 | +} | ||
130 | + | ||
131 | +u32 fm_tx_set_rds_mode(struct fmdev *fmdev, u8 rds_en_dis) | ||
132 | +{ | ||
133 | + u16 payload; | ||
134 | + u32 ret; | ||
135 | + u8 rds_text[] = "Zoom2\n"; | ||
136 | + | ||
137 | + fmdbg("rds_en_dis:%d(E:%d, D:%d)\n", rds_en_dis, | ||
138 | + FM_RDS_ENABLE, FM_RDS_DISABLE); | ||
139 | + | ||
140 | + if (rds_en_dis == FM_RDS_ENABLE) { | ||
141 | + /* Set RDS length */ | ||
142 | + set_rds_len(fmdev, 0, strlen(rds_text)); | ||
143 | + | ||
144 | + /* Set RDS text */ | ||
145 | + set_rds_text(fmdev, rds_text); | ||
146 | + | ||
147 | + /* Set RDS mode */ | ||
148 | + set_rds_data_mode(fmdev, 0x0); | ||
149 | + } | ||
150 | + | ||
151 | + /* Send command to enable RDS */ | ||
152 | + if (rds_en_dis == FM_RDS_ENABLE) | ||
153 | + payload = 0x01; | ||
154 | + else | ||
155 | + payload = 0x00; | ||
156 | + | ||
157 | + ret = fmc_send_cmd(fmdev, RDS_DATA_ENB, REG_WR, &payload, | ||
158 | + sizeof(payload), NULL, NULL); | ||
159 | + if (ret < 0) | ||
160 | + return ret; | ||
161 | + | ||
162 | + if (rds_en_dis == FM_RDS_ENABLE) { | ||
163 | + /* Set RDS length */ | ||
164 | + set_rds_len(fmdev, 0, strlen(rds_text)); | ||
165 | + | ||
166 | + /* Set RDS text */ | ||
167 | + set_rds_text(fmdev, rds_text); | ||
168 | + } | ||
169 | + fmdev->tx_data.rds.flag = rds_en_dis; | ||
170 | + | ||
171 | + return 0; | ||
172 | +} | ||
173 | + | ||
174 | +u32 fm_tx_set_radio_text(struct fmdev *fmdev, u8 *rds_text, u8 rds_type) | ||
175 | +{ | ||
176 | + u16 payload; | ||
177 | + u32 ret; | ||
178 | + | ||
179 | + if (fmdev->curr_fmmode != FM_MODE_TX) | ||
180 | + return -EPERM; | ||
181 | + | ||
182 | + fm_tx_set_rds_mode(fmdev, 0); | ||
183 | + | ||
184 | + /* Set RDS length */ | ||
185 | + set_rds_len(fmdev, rds_type, strlen(rds_text)); | ||
186 | + | ||
187 | + /* Set RDS text */ | ||
188 | + set_rds_text(fmdev, rds_text); | ||
189 | + | ||
190 | + /* Set RDS mode */ | ||
191 | + set_rds_data_mode(fmdev, 0x0); | ||
192 | + | ||
193 | + payload = 1; | ||
194 | + ret = fmc_send_cmd(fmdev, RDS_DATA_ENB, REG_WR, &payload, | ||
195 | + sizeof(payload), NULL, NULL); | ||
196 | + if (ret < 0) | ||
197 | + return ret; | ||
198 | + | ||
199 | + return 0; | ||
200 | +} | ||
201 | + | ||
202 | +u32 fm_tx_set_af(struct fmdev *fmdev, u32 af) | ||
203 | +{ | ||
204 | + u16 payload; | ||
205 | + u32 ret; | ||
206 | + | ||
207 | + if (fmdev->curr_fmmode != FM_MODE_TX) | ||
208 | + return -EPERM; | ||
209 | + | ||
210 | + fmdbg("AF: %d\n", af); | ||
211 | + | ||
212 | + af = (af - 87500) / 100; | ||
213 | + payload = (u16)af; | ||
214 | + ret = fmc_send_cmd(fmdev, TA_SET, REG_WR, &payload, | ||
215 | + sizeof(payload), NULL, NULL); | ||
216 | + if (ret < 0) | ||
217 | + return ret; | ||
218 | + | ||
219 | + return 0; | ||
220 | +} | ||
221 | + | ||
222 | +u32 fm_tx_set_region(struct fmdev *fmdev, u8 region) | ||
223 | +{ | ||
224 | + u16 payload; | ||
225 | + u32 ret; | ||
226 | + | ||
227 | + if (region != FM_BAND_EUROPE_US && region != FM_BAND_JAPAN) { | ||
228 | + fmerr("Invalid band\n"); | ||
229 | + return -EINVAL; | ||
230 | + } | ||
231 | + | ||
232 | + /* Send command to set the band */ | ||
233 | + payload = (u16)region; | ||
234 | + ret = fmc_send_cmd(fmdev, TX_BAND_SET, REG_WR, &payload, | ||
235 | + sizeof(payload), NULL, NULL); | ||
236 | + if (ret < 0) | ||
237 | + return ret; | ||
238 | + | ||
239 | + return 0; | ||
240 | +} | ||
241 | + | ||
242 | +u32 fm_tx_set_mute_mode(struct fmdev *fmdev, u8 mute_mode_toset) | ||
243 | +{ | ||
244 | + u16 payload; | ||
245 | + u32 ret; | ||
246 | + | ||
247 | + fmdbg("tx: mute mode %d\n", mute_mode_toset); | ||
248 | + | ||
249 | + payload = mute_mode_toset; | ||
250 | + ret = fmc_send_cmd(fmdev, MUTE, REG_WR, &payload, | ||
251 | + sizeof(payload), NULL, NULL); | ||
252 | + if (ret < 0) | ||
253 | + return ret; | ||
254 | + | ||
255 | + return 0; | ||
256 | +} | ||
257 | + | ||
258 | +/* Set TX Audio I/O */ | ||
259 | +static u32 set_audio_io(struct fmdev *fmdev) | ||
260 | +{ | ||
261 | + struct fmtx_data *tx = &fmdev->tx_data; | ||
262 | + u16 payload; | ||
263 | + u32 ret; | ||
264 | + | ||
265 | + /* Set Audio I/O Enable */ | ||
266 | + payload = tx->audio_io; | ||
267 | + ret = fmc_send_cmd(fmdev, AUDIO_IO_SET, REG_WR, &payload, | ||
268 | + sizeof(payload), NULL, NULL); | ||
269 | + if (ret < 0) | ||
270 | + return ret; | ||
271 | + | ||
272 | + /* TODO: is audio set? */ | ||
273 | + return 0; | ||
274 | +} | ||
275 | + | ||
276 | +/* Start TX Transmission */ | ||
277 | +static u32 enable_xmit(struct fmdev *fmdev, u8 new_xmit_state) | ||
278 | +{ | ||
279 | + struct fmtx_data *tx = &fmdev->tx_data; | ||
280 | + unsigned long timeleft; | ||
281 | + u16 payload; | ||
282 | + u32 ret; | ||
283 | + | ||
284 | + /* Enable POWER_ENB interrupts */ | ||
285 | + payload = FM_POW_ENB_EVENT; | ||
286 | + ret = fmc_send_cmd(fmdev, INT_MASK_SET, REG_WR, &payload, | ||
287 | + sizeof(payload), NULL, NULL); | ||
288 | + if (ret < 0) | ||
289 | + return ret; | ||
290 | + | ||
291 | + /* Set Power Enable */ | ||
292 | + payload = new_xmit_state; | ||
293 | + ret = fmc_send_cmd(fmdev, POWER_ENB_SET, REG_WR, &payload, | ||
294 | + sizeof(payload), NULL, NULL); | ||
295 | + if (ret < 0) | ||
296 | + return ret; | ||
297 | + | ||
298 | + /* Wait for Power Enabled */ | ||
299 | + init_completion(&fmdev->maintask_comp); | ||
300 | + timeleft = wait_for_completion_timeout(&fmdev->maintask_comp, | ||
301 | + FM_DRV_TX_TIMEOUT); | ||
302 | + if (!timeleft) { | ||
303 | + fmerr("Timeout(%d sec),didn't get tune ended interrupt\n", | ||
304 | + jiffies_to_msecs(FM_DRV_TX_TIMEOUT) / 1000); | ||
305 | + return -ETIMEDOUT; | ||
306 | + } | ||
307 | + | ||
308 | + set_bit(FM_CORE_TX_XMITING, &fmdev->flag); | ||
309 | + tx->xmit_state = new_xmit_state; | ||
310 | + | ||
311 | + return 0; | ||
312 | +} | ||
313 | + | ||
314 | +/* Set TX power level */ | ||
315 | +u32 fm_tx_set_pwr_lvl(struct fmdev *fmdev, u8 new_pwr_lvl) | ||
316 | +{ | ||
317 | + u16 payload; | ||
318 | + struct fmtx_data *tx = &fmdev->tx_data; | ||
319 | + u32 ret; | ||
320 | + | ||
321 | + if (fmdev->curr_fmmode != FM_MODE_TX) | ||
322 | + return -EPERM; | ||
323 | + fmdbg("tx: pwr_level_to_set %ld\n", (long int)new_pwr_lvl); | ||
324 | + | ||
325 | + /* If the core isn't ready update global variable */ | ||
326 | + if (!test_bit(FM_CORE_READY, &fmdev->flag)) { | ||
327 | + tx->pwr_lvl = new_pwr_lvl; | ||
328 | + return 0; | ||
329 | + } | ||
330 | + | ||
331 | + /* Set power level: Application will specify power level value in | ||
332 | + * units of dB/uV, whereas range and step are specific to FM chip. | ||
333 | + * For TI's WL chips, convert application specified power level value | ||
334 | + * to chip specific value by subtracting 122 from it. Refer to TI FM | ||
335 | + * data sheet for details. | ||
336 | + * */ | ||
337 | + | ||
338 | + payload = (FM_PWR_LVL_HIGH - new_pwr_lvl); | ||
339 | + ret = fmc_send_cmd(fmdev, POWER_LEV_SET, REG_WR, &payload, | ||
340 | + sizeof(payload), NULL, NULL); | ||
341 | + if (ret < 0) | ||
342 | + return ret; | ||
343 | + | ||
344 | + /* TODO: is the power level set? */ | ||
345 | + tx->pwr_lvl = new_pwr_lvl; | ||
346 | + | ||
347 | + return 0; | ||
348 | +} | ||
349 | + | ||
350 | +/* | ||
351 | + * Sets FM TX pre-emphasis filter value (OFF, 50us, or 75us) | ||
352 | + * Convert V4L2 specified filter values to chip specific filter values. | ||
353 | + */ | ||
354 | +u32 fm_tx_set_preemph_filter(struct fmdev *fmdev, u32 preemphasis) | ||
355 | +{ | ||
356 | + struct fmtx_data *tx = &fmdev->tx_data; | ||
357 | + u16 payload; | ||
358 | + u32 ret; | ||
359 | + | ||
360 | + if (fmdev->curr_fmmode != FM_MODE_TX) | ||
361 | + return -EPERM; | ||
362 | + | ||
363 | + switch (preemphasis) { | ||
364 | + case V4L2_PREEMPHASIS_DISABLED: | ||
365 | + payload = FM_TX_PREEMPH_OFF; | ||
366 | + break; | ||
367 | + case V4L2_PREEMPHASIS_50_uS: | ||
368 | + payload = FM_TX_PREEMPH_50US; | ||
369 | + break; | ||
370 | + case V4L2_PREEMPHASIS_75_uS: | ||
371 | + payload = FM_TX_PREEMPH_75US; | ||
372 | + break; | ||
373 | + } | ||
374 | + | ||
375 | + ret = fmc_send_cmd(fmdev, PREMPH_SET, REG_WR, &payload, | ||
376 | + sizeof(payload), NULL, NULL); | ||
377 | + if (ret < 0) | ||
378 | + return ret; | ||
379 | + | ||
380 | + tx->preemph = payload; | ||
381 | + | ||
382 | + return ret; | ||
383 | +} | ||
384 | + | ||
385 | +/* Get the TX tuning capacitor value.*/ | ||
386 | +u32 fm_tx_get_tune_cap_val(struct fmdev *fmdev) | ||
387 | +{ | ||
388 | + u16 curr_val; | ||
389 | + u32 ret, resp_len; | ||
390 | + | ||
391 | + if (fmdev->curr_fmmode != FM_MODE_TX) | ||
392 | + return -EPERM; | ||
393 | + | ||
394 | + ret = fmc_send_cmd(fmdev, READ_FMANT_TUNE_VALUE, REG_RD, | ||
395 | + NULL, sizeof(curr_val), &curr_val, &resp_len); | ||
396 | + if (ret < 0) | ||
397 | + return ret; | ||
398 | + | ||
399 | + curr_val = be16_to_cpu(curr_val); | ||
400 | + | ||
401 | + return curr_val; | ||
402 | +} | ||
403 | + | ||
404 | +/* Set TX Frequency */ | ||
405 | +u32 fm_tx_set_freq(struct fmdev *fmdev, u32 freq_to_set) | ||
406 | +{ | ||
407 | + struct fmtx_data *tx = &fmdev->tx_data; | ||
408 | + u16 payload, chanl_index; | ||
409 | + u32 ret; | ||
410 | + | ||
411 | + if (test_bit(FM_CORE_TX_XMITING, &fmdev->flag)) { | ||
412 | + enable_xmit(fmdev, 0); | ||
413 | + clear_bit(FM_CORE_TX_XMITING, &fmdev->flag); | ||
414 | + } | ||
415 | + | ||
416 | + /* Enable FR, BL interrupts */ | ||
417 | + payload = (FM_FR_EVENT | FM_BL_EVENT); | ||
418 | + ret = fmc_send_cmd(fmdev, INT_MASK_SET, REG_WR, &payload, | ||
419 | + sizeof(payload), NULL, NULL); | ||
420 | + if (ret < 0) | ||
421 | + return ret; | ||
422 | + | ||
423 | + tx->tx_frq = (unsigned long)freq_to_set; | ||
424 | + fmdbg("tx: freq_to_set %ld\n", (long int)tx->tx_frq); | ||
425 | + | ||
426 | + chanl_index = freq_to_set / 10; | ||
427 | + | ||
428 | + /* Set current tuner channel */ | ||
429 | + payload = chanl_index; | ||
430 | + ret = fmc_send_cmd(fmdev, CHANL_SET, REG_WR, &payload, | ||
431 | + sizeof(payload), NULL, NULL); | ||
432 | + if (ret < 0) | ||
433 | + return ret; | ||
434 | + | ||
435 | + fm_tx_set_pwr_lvl(fmdev, tx->pwr_lvl); | ||
436 | + fm_tx_set_preemph_filter(fmdev, tx->preemph); | ||
437 | + | ||
438 | + tx->audio_io = 0x01; /* I2S */ | ||
439 | + set_audio_io(fmdev); | ||
440 | + | ||
441 | + enable_xmit(fmdev, 0x01); /* Enable transmission */ | ||
442 | + | ||
443 | + tx->aud_mode = FM_STEREO_MODE; | ||
444 | + tx->rds.flag = FM_RDS_DISABLE; | ||
445 | + | ||
446 | + return 0; | ||
447 | +} | ||
448 | + | ||
449 | diff --git a/drivers/media/radio/wl128x/fmdrv_tx.h b/drivers/media/radio/wl128x/fmdrv_tx.h | ||
450 | new file mode 100644 | ||
451 | index 0000000..e393a2b | ||
452 | --- /dev/null | ||
453 | +++ b/drivers/media/radio/wl128x/fmdrv_tx.h | ||
454 | @@ -0,0 +1,37 @@ | ||
455 | +/* | ||
456 | + * FM Driver for Connectivity chip of Texas Instruments. | ||
457 | + * FM TX module header. | ||
458 | + * | ||
459 | + * Copyright (C) 2011 Texas Instruments | ||
460 | + * | ||
461 | + * This program is free software; you can redistribute it and/or modify | ||
462 | + * it under the terms of the GNU General Public License version 2 as | ||
463 | + * published by the Free Software Foundation. | ||
464 | + * | ||
465 | + * This program is distributed in the hope that it will be useful, | ||
466 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
467 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
468 | + * GNU General Public License for more details. | ||
469 | + * | ||
470 | + * You should have received a copy of the GNU General Public License | ||
471 | + * along with this program; if not, write to the Free Software | ||
472 | + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
473 | + * | ||
474 | + */ | ||
475 | + | ||
476 | +#ifndef _FMDRV_TX_H | ||
477 | +#define _FMDRV_TX_H | ||
478 | + | ||
479 | +u32 fm_tx_set_freq(struct fmdev *, u32); | ||
480 | +u32 fm_tx_set_pwr_lvl(struct fmdev *, u8); | ||
481 | +u32 fm_tx_set_region(struct fmdev *, u8); | ||
482 | +u32 fm_tx_set_mute_mode(struct fmdev *, u8); | ||
483 | +u32 fm_tx_set_stereo_mono(struct fmdev *, u16); | ||
484 | +u32 fm_tx_set_rds_mode(struct fmdev *, u8); | ||
485 | +u32 fm_tx_set_radio_text(struct fmdev *, u8 *, u8); | ||
486 | +u32 fm_tx_set_af(struct fmdev *, u32); | ||
487 | +u32 fm_tx_set_preemph_filter(struct fmdev *, u32); | ||
488 | +u32 fm_tx_get_tune_cap_val(struct fmdev *); | ||
489 | + | ||
490 | +#endif | ||
491 | + | ||
492 | -- | ||
493 | 1.6.6.1 | ||
494 | |||