aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43/phy_a.c
diff options
context:
space:
mode:
authorMichael Buesch <mb@bu3sch.de>2008-08-29 20:09:08 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-09-05 16:17:42 -0400
commit99c4a780624da24d20309f2be5abe5ef8d20fcc0 (patch)
treed244a0701097d03794a226946d370ed31bcd7bf8 /drivers/net/wireless/b43/phy_a.c
parentf59ac0481660e66cec67f1d6b024e78b9dc715fe (diff)
b43: Move remaining code from phy.c to phy_a.c
This moves the remaining code from phy.c to phy_a.c phy.c is removed. No functional change. Just moving code and removing dead code. Signed-off-by: Michael Buesch <mb@bu3sch.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43/phy_a.c')
-rw-r--r--drivers/net/wireless/b43/phy_a.c85
1 files changed, 84 insertions, 1 deletions
diff --git a/drivers/net/wireless/b43/phy_a.c b/drivers/net/wireless/b43/phy_a.c
index 4d7d59e30960..2ca8353aa9ad 100644
--- a/drivers/net/wireless/b43/phy_a.c
+++ b/drivers/net/wireless/b43/phy_a.c
@@ -58,6 +58,25 @@ static inline u16 freq_r3A_value(u16 frequency)
58 return value; 58 return value;
59} 59}
60 60
61#if 0
62/* This function converts a TSSI value to dBm in Q5.2 */
63static s8 b43_aphy_estimate_power_out(struct b43_wldev *dev, s8 tssi)
64{
65 struct b43_phy *phy = &dev->phy;
66 struct b43_phy_a *aphy = phy->a;
67 s8 dbm = 0;
68 s32 tmp;
69
70 tmp = (aphy->tgt_idle_tssi - aphy->cur_idle_tssi + tssi);
71 tmp += 0x80;
72 tmp = clamp_val(tmp, 0x00, 0xFF);
73 dbm = aphy->tssi2dbm[tmp];
74 //TODO: There's a FIXME on the specs
75
76 return dbm;
77}
78#endif
79
61void b43_radio_set_tx_iq(struct b43_wldev *dev) 80void b43_radio_set_tx_iq(struct b43_wldev *dev)
62{ 81{
63 static const u8 data_high[5] = { 0x00, 0x40, 0x80, 0x90, 0xD0 }; 82 static const u8 data_high[5] = { 0x00, 0x40, 0x80, 0x90, 0xD0 };
@@ -326,9 +345,46 @@ void b43_phy_inita(struct b43_wldev *dev)
326 } 345 }
327} 346}
328 347
348/* Initialise the TSSI->dBm lookup table */
349static int b43_aphy_init_tssi2dbm_table(struct b43_wldev *dev)
350{
351 struct b43_phy *phy = &dev->phy;
352 struct b43_phy_a *aphy = phy->a;
353 s16 pab0, pab1, pab2;
354
355 pab0 = (s16) (dev->dev->bus->sprom.pa1b0);
356 pab1 = (s16) (dev->dev->bus->sprom.pa1b1);
357 pab2 = (s16) (dev->dev->bus->sprom.pa1b2);
358
359 if (pab0 != 0 && pab1 != 0 && pab2 != 0 &&
360 pab0 != -1 && pab1 != -1 && pab2 != -1) {
361 /* The pabX values are set in SPROM. Use them. */
362 if ((s8) dev->dev->bus->sprom.itssi_a != 0 &&
363 (s8) dev->dev->bus->sprom.itssi_a != -1)
364 aphy->tgt_idle_tssi =
365 (s8) (dev->dev->bus->sprom.itssi_a);
366 else
367 aphy->tgt_idle_tssi = 62;
368 aphy->tssi2dbm = b43_generate_dyn_tssi2dbm_tab(dev, pab0,
369 pab1, pab2);
370 if (!aphy->tssi2dbm)
371 return -ENOMEM;
372 } else {
373 /* pabX values not set in SPROM,
374 * but APHY needs a generated table. */
375 aphy->tssi2dbm = NULL;
376 b43err(dev->wl, "Could not generate tssi2dBm "
377 "table (wrong SPROM info)!\n");
378 return -ENODEV;
379 }
380
381 return 0;
382}
383
329static int b43_aphy_op_allocate(struct b43_wldev *dev) 384static int b43_aphy_op_allocate(struct b43_wldev *dev)
330{ 385{
331 struct b43_phy_a *aphy; 386 struct b43_phy_a *aphy;
387 int err;
332 388
333 aphy = kzalloc(sizeof(*aphy), GFP_KERNEL); 389 aphy = kzalloc(sizeof(*aphy), GFP_KERNEL);
334 if (!aphy) 390 if (!aphy)
@@ -337,7 +393,17 @@ static int b43_aphy_op_allocate(struct b43_wldev *dev)
337 393
338 //TODO init struct b43_phy_a 394 //TODO init struct b43_phy_a
339 395
396 err = b43_aphy_init_tssi2dbm_table(dev);
397 if (err)
398 goto err_free_aphy;
399
340 return 0; 400 return 0;
401
402err_free_aphy:
403 kfree(aphy);
404 dev->phy.a = NULL;
405
406 return err;
341} 407}
342 408
343static int b43_aphy_op_init(struct b43_wldev *dev) 409static int b43_aphy_op_init(struct b43_wldev *dev)
@@ -359,6 +425,7 @@ static void b43_aphy_op_exit(struct b43_wldev *dev)
359 aphy->initialised = 0; 425 aphy->initialised = 0;
360 } 426 }
361 //TODO 427 //TODO
428 kfree(aphy->tssi2dbm);
362 kfree(aphy); 429 kfree(aphy);
363 dev->phy.a = NULL; 430 dev->phy.a = NULL;
364} 431}
@@ -430,7 +497,23 @@ static bool b43_aphy_op_supports_hwpctl(struct b43_wldev *dev)
430 497
431static void b43_aphy_op_software_rfkill(struct b43_wldev *dev, 498static void b43_aphy_op_software_rfkill(struct b43_wldev *dev,
432 enum rfkill_state state) 499 enum rfkill_state state)
433{//TODO 500{
501 struct b43_phy *phy = &dev->phy;
502
503 if (state == RFKILL_STATE_UNBLOCKED) {
504 if (phy->radio_on)
505 return;
506 b43_radio_write16(dev, 0x0004, 0x00C0);
507 b43_radio_write16(dev, 0x0005, 0x0008);
508 b43_phy_write(dev, 0x0010, b43_phy_read(dev, 0x0010) & 0xFFF7);
509 b43_phy_write(dev, 0x0011, b43_phy_read(dev, 0x0011) & 0xFFF7);
510 b43_radio_init2060(dev);
511 } else {
512 b43_radio_write16(dev, 0x0004, 0x00FF);
513 b43_radio_write16(dev, 0x0005, 0x00FB);
514 b43_phy_write(dev, 0x0010, b43_phy_read(dev, 0x0010) | 0x0008);
515 b43_phy_write(dev, 0x0011, b43_phy_read(dev, 0x0011) | 0x0008);
516 }
434} 517}
435 518
436static int b43_aphy_op_switch_channel(struct b43_wldev *dev, 519static int b43_aphy_op_switch_channel(struct b43_wldev *dev,