Send users mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        
http://rt2x00.serialmonkey.com/mailman/listinfo/users_rt2x00.serialmonkey.com

or, via email, send a message with subject or body 'help' to
        [email protected]

You can reach the person managing the list at
        [email protected]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of users digest..."


Today's Topics:

   1. [PATCH 02/32] rt2800: prepare for rt2800_init_bbp spit
      ([email protected])
   2. [PATCH 03/32] rt2800: add rt2800_init_bbp_305x_soc        subroutine
      ([email protected])
   3. [PATCH 04/32] rt2800: move 3352 bbp specific code ([email protected])
   4. [PATCH 01/32] rt2800: make rt2800_init_bbp return void
      ([email protected])
   5. [PATCH 05/32] rt2800: move rt2800_bbp4_mac_if_ctrl        to proper
      subroutines ([email protected])
   6. [PATCH 00/32] BBP initialization split ([email protected])
   7. [PATCH 06/32] rt2800: initialize BBP_R31 on proper
      subroutines ([email protected])
   8. [PATCH 07/32] rt2800: initialize BBP_R47 on 3352  subroutine
      ([email protected])
   9. [PATCH 08/32] rt2800: initialize BBP_R65 & BBP_R66        on all
      subroutines (except 5592) ([email protected])


----------------------------------------------------------------------

Message: 1
Date: Sat, 18 May 2013 14:03:25 +0200
From: [email protected]
To: [email protected]
Cc: [email protected]
Subject: [rt2x00-users] [PATCH 02/32] rt2800: prepare for
        rt2800_init_bbp spit
Message-ID: <[email protected]>

From: Stanislaw Gruszka <[email protected]>

Signed-off-by: Stanislaw Gruszka <[email protected]>
Acked-by: Helmut Schaa <[email protected]>
---
 drivers/net/wireless/rt2x00/rt2800lib.c |   57 ++++++++++++++++++++++++++++++-
 1 files changed, 56 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c 
b/drivers/net/wireless/rt2x00/rt2800lib.c
index f431dcb..e04b1fa 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -3953,6 +3953,34 @@ static void rt2800_init_bbp_early(struct rt2x00_dev 
*rt2x00dev)
        rt2800_bbp_write(rt2x00dev, 106, 0x35);
 }
 
+static void rt2800_init_bbp_28xx(struct rt2x00_dev *rt2x00dev)
+{
+}
+
+static void rt2800_init_bbp_30xx(struct rt2x00_dev *rt2x00dev)
+{
+}
+
+static void rt2800_init_bbp_3290(struct rt2x00_dev *rt2x00dev)
+{
+}
+
+static void rt2800_init_bbp_3352(struct rt2x00_dev *rt2x00dev)
+{
+}
+
+static void rt2800_init_bbp_3390(struct rt2x00_dev *rt2x00dev)
+{
+}
+
+static void rt2800_init_bbp_3572(struct rt2x00_dev *rt2x00dev)
+{
+}
+
+static void rt2800_init_bbp_53xx(struct rt2x00_dev *rt2x00dev)
+{
+}
+
 static void rt2800_init_bbp_5592(struct rt2x00_dev *rt2x00dev)
 {
        int ant, div_mode;
@@ -4034,7 +4062,34 @@ static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
        u8 reg_id;
        u8 value;
 
-       if (rt2x00_rt(rt2x00dev, RT5592)) {
+       switch (rt2x00dev->chip.rt) {
+       case RT2860:
+       case RT2872:
+       case RT2883:
+               rt2800_init_bbp_28xx(rt2x00dev);
+               break;
+       case RT3070:
+       case RT3071:
+       case RT3090:
+               rt2800_init_bbp_30xx(rt2x00dev);
+               break;
+       case RT3290:
+               rt2800_init_bbp_3290(rt2x00dev);
+               break;
+       case RT3352:
+               rt2800_init_bbp_3352(rt2x00dev);
+               break;
+       case RT3390:
+               rt2800_init_bbp_3390(rt2x00dev);
+               break;
+       case RT3572:
+               rt2800_init_bbp_3572(rt2x00dev);
+               break;
+       case RT5390:
+       case RT5392:
+               rt2800_init_bbp_53xx(rt2x00dev);
+               break;
+       case RT5592:
                rt2800_init_bbp_5592(rt2x00dev);
                return;
        }
-- 
1.7.4.4




------------------------------

Message: 2
Date: Sat, 18 May 2013 14:03:26 +0200
From: [email protected]
To: [email protected]
Cc: [email protected]
Subject: [rt2x00-users] [PATCH 03/32] rt2800: add
        rt2800_init_bbp_305x_soc        subroutine
Message-ID: <[email protected]>

From: Stanislaw Gruszka <[email protected]>

New routine for SOC specific BBP initialization, empty for now.

Signed-off-by: Stanislaw Gruszka <[email protected]>
Acked-by: Helmut Schaa <[email protected]>
---
 drivers/net/wireless/rt2x00/rt2800lib.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c 
b/drivers/net/wireless/rt2x00/rt2800lib.c
index e04b1fa..697e38b 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -3953,6 +3953,10 @@ static void rt2800_init_bbp_early(struct rt2x00_dev 
*rt2x00dev)
        rt2800_bbp_write(rt2x00dev, 106, 0x35);
 }
 
+static void rt2800_init_bbp_305x_soc(struct rt2x00_dev *rt2x00dev)
+{
+}
+
 static void rt2800_init_bbp_28xx(struct rt2x00_dev *rt2x00dev)
 {
 }
@@ -4062,6 +4066,9 @@ static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
        u8 reg_id;
        u8 value;
 
+       if (rt2800_is_305x_soc(rt2x00dev))
+               rt2800_init_bbp_305x_soc(rt2x00dev);
+
        switch (rt2x00dev->chip.rt) {
        case RT2860:
        case RT2872:
-- 
1.7.4.4




------------------------------

Message: 3
Date: Sat, 18 May 2013 14:03:27 +0200
From: [email protected]
To: [email protected]
Cc: [email protected]
Subject: [rt2x00-users] [PATCH 04/32] rt2800: move 3352 bbp specific
        code
Message-ID: <[email protected]>

From: Stanislaw Gruszka <[email protected]>

Signed-off-by: Stanislaw Gruszka <[email protected]>
Acked-by: Helmut Schaa <[email protected]>
---
 drivers/net/wireless/rt2x00/rt2800lib.c |    7 ++-----
 1 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c 
b/drivers/net/wireless/rt2x00/rt2800lib.c
index 697e38b..16bdd3d 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -3971,6 +3971,8 @@ static void rt2800_init_bbp_3290(struct rt2x00_dev 
*rt2x00dev)
 
 static void rt2800_init_bbp_3352(struct rt2x00_dev *rt2x00dev)
 {
+       rt2800_bbp_write(rt2x00dev, 3, 0x00);
+       rt2800_bbp_write(rt2x00dev, 4, 0x50);
 }
 
 static void rt2800_init_bbp_3390(struct rt2x00_dev *rt2x00dev)
@@ -4101,11 +4103,6 @@ static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
                return;
        }
 
-       if (rt2x00_rt(rt2x00dev, RT3352)) {
-               rt2800_bbp_write(rt2x00dev, 3, 0x00);
-               rt2800_bbp_write(rt2x00dev, 4, 0x50);
-       }
-
        if (rt2x00_rt(rt2x00dev, RT3290) ||
            rt2x00_rt(rt2x00dev, RT5390) ||
            rt2x00_rt(rt2x00dev, RT5392))
-- 
1.7.4.4




------------------------------

Message: 4
Date: Sat, 18 May 2013 14:03:24 +0200
From: [email protected]
To: [email protected]
Cc: [email protected]
Subject: [rt2x00-users] [PATCH 01/32] rt2800: make rt2800_init_bbp
        return  void
Message-ID: <[email protected]>

From: Stanislaw Gruszka <[email protected]>

This function can not fail, we always return 0.

Signed-off-by: Stanislaw Gruszka <[email protected]>
Acked-by: Helmut Schaa <[email protected]>
---
 drivers/net/wireless/rt2x00/rt2800lib.c |   14 +++++---------
 1 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c 
b/drivers/net/wireless/rt2x00/rt2800lib.c
index b52d70c..f431dcb 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -4027,20 +4027,16 @@ static void rt2800_init_bbp_5592(struct rt2x00_dev 
*rt2x00dev)
                rt2800_bbp_write(rt2x00dev, 103, 0xc0);
 }
 
-static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
+static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
 {
        unsigned int i;
        u16 eeprom;
        u8 reg_id;
        u8 value;
 
-       if (unlikely(rt2800_wait_bbp_rf_ready(rt2x00dev) ||
-                    rt2800_wait_bbp_ready(rt2x00dev)))
-               return -EACCES;
-
        if (rt2x00_rt(rt2x00dev, RT5592)) {
                rt2800_init_bbp_5592(rt2x00dev);
-               return 0;
+               return;
        }
 
        if (rt2x00_rt(rt2x00dev, RT3352)) {
@@ -4337,8 +4333,6 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
                        rt2800_bbp_write(rt2x00dev, reg_id, value);
                }
        }
-
-       return 0;
 }
 
 static void rt2800_led_open_drain_enable(struct rt2x00_dev *rt2x00dev)
@@ -5189,9 +5183,11 @@ int rt2800_enable_radio(struct rt2x00_dev *rt2x00dev)
        }
        msleep(1);
 
-       if (unlikely(rt2800_init_bbp(rt2x00dev)))
+       if (unlikely(rt2800_wait_bbp_rf_ready(rt2x00dev) ||
+                    rt2800_wait_bbp_ready(rt2x00dev)))
                return -EIO;
 
+       rt2800_init_bbp(rt2x00dev);
        rt2800_init_rfcsr(rt2x00dev);
 
        if (rt2x00_is_usb(rt2x00dev) &&
-- 
1.7.4.4




------------------------------

Message: 5
Date: Sat, 18 May 2013 14:03:28 +0200
From: [email protected]
To: [email protected]
Cc: [email protected]
Subject: [rt2x00-users] [PATCH 05/32] rt2800: move
        rt2800_bbp4_mac_if_ctrl to proper subroutines
Message-ID: <[email protected]>

From: Stanislaw Gruszka <[email protected]>

Signed-off-by: Stanislaw Gruszka <[email protected]>
Acked-by: Helmut Schaa <[email protected]>
---
 drivers/net/wireless/rt2x00/rt2800lib.c |    7 ++-----
 1 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c 
b/drivers/net/wireless/rt2x00/rt2800lib.c
index 16bdd3d..7c5b25d 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -3967,6 +3967,7 @@ static void rt2800_init_bbp_30xx(struct rt2x00_dev 
*rt2x00dev)
 
 static void rt2800_init_bbp_3290(struct rt2x00_dev *rt2x00dev)
 {
+       rt2800_bbp4_mac_if_ctrl(rt2x00dev);
 }
 
 static void rt2800_init_bbp_3352(struct rt2x00_dev *rt2x00dev)
@@ -3985,6 +3986,7 @@ static void rt2800_init_bbp_3572(struct rt2x00_dev 
*rt2x00dev)
 
 static void rt2800_init_bbp_53xx(struct rt2x00_dev *rt2x00dev)
 {
+       rt2800_bbp4_mac_if_ctrl(rt2x00dev);
 }
 
 static void rt2800_init_bbp_5592(struct rt2x00_dev *rt2x00dev)
@@ -4103,11 +4105,6 @@ static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
                return;
        }
 
-       if (rt2x00_rt(rt2x00dev, RT3290) ||
-           rt2x00_rt(rt2x00dev, RT5390) ||
-           rt2x00_rt(rt2x00dev, RT5392))
-               rt2800_bbp4_mac_if_ctrl(rt2x00dev);
-
        if (rt2800_is_305x_soc(rt2x00dev) ||
            rt2x00_rt(rt2x00dev, RT3290) ||
            rt2x00_rt(rt2x00dev, RT3352) ||
-- 
1.7.4.4




------------------------------

Message: 6
Date: Sat, 18 May 2013 14:03:23 +0200
From: [email protected]
To: [email protected]
Cc: [email protected]
Subject: [rt2x00-users] [PATCH 00/32] BBP initialization split
Message-ID: <[email protected]>

This series spits big and messy rt2800_init_bbp() procedure into small
per chip (or few similar chips) subroutines.




------------------------------

Message: 7
Date: Sat, 18 May 2013 14:03:29 +0200
From: [email protected]
To: [email protected]
Cc: [email protected]
Subject: [rt2x00-users] [PATCH 06/32] rt2800: initialize BBP_R31 on
        proper  subroutines
Message-ID: <[email protected]>

From: Stanislaw Gruszka <[email protected]>

Signed-off-by: Stanislaw Gruszka <[email protected]>
Acked-by: Helmut Schaa <[email protected]>
---
 drivers/net/wireless/rt2x00/rt2800lib.c |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c 
b/drivers/net/wireless/rt2x00/rt2800lib.c
index 7c5b25d..84c7d4e 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -3955,6 +3955,7 @@ static void rt2800_init_bbp_early(struct rt2x00_dev 
*rt2x00dev)
 
 static void rt2800_init_bbp_305x_soc(struct rt2x00_dev *rt2x00dev)
 {
+       rt2800_bbp_write(rt2x00dev, 31, 0x08);
 }
 
 static void rt2800_init_bbp_28xx(struct rt2x00_dev *rt2x00dev)
@@ -3968,12 +3969,16 @@ static void rt2800_init_bbp_30xx(struct rt2x00_dev 
*rt2x00dev)
 static void rt2800_init_bbp_3290(struct rt2x00_dev *rt2x00dev)
 {
        rt2800_bbp4_mac_if_ctrl(rt2x00dev);
+
+       rt2800_bbp_write(rt2x00dev, 31, 0x08);
 }
 
 static void rt2800_init_bbp_3352(struct rt2x00_dev *rt2x00dev)
 {
        rt2800_bbp_write(rt2x00dev, 3, 0x00);
        rt2800_bbp_write(rt2x00dev, 4, 0x50);
+
+       rt2800_bbp_write(rt2x00dev, 31, 0x08);
 }
 
 static void rt2800_init_bbp_3390(struct rt2x00_dev *rt2x00dev)
@@ -3982,11 +3987,14 @@ static void rt2800_init_bbp_3390(struct rt2x00_dev 
*rt2x00dev)
 
 static void rt2800_init_bbp_3572(struct rt2x00_dev *rt2x00dev)
 {
+       rt2800_bbp_write(rt2x00dev, 31, 0x08);
 }
 
 static void rt2800_init_bbp_53xx(struct rt2x00_dev *rt2x00dev)
 {
        rt2800_bbp4_mac_if_ctrl(rt2x00dev);
+
+       rt2800_bbp_write(rt2x00dev, 31, 0x08);
 }
 
 static void rt2800_init_bbp_5592(struct rt2x00_dev *rt2x00dev)
@@ -4105,14 +4113,6 @@ static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
                return;
        }
 
-       if (rt2800_is_305x_soc(rt2x00dev) ||
-           rt2x00_rt(rt2x00dev, RT3290) ||
-           rt2x00_rt(rt2x00dev, RT3352) ||
-           rt2x00_rt(rt2x00dev, RT3572) ||
-           rt2x00_rt(rt2x00dev, RT5390) ||
-           rt2x00_rt(rt2x00dev, RT5392))
-               rt2800_bbp_write(rt2x00dev, 31, 0x08);
-
        if (rt2x00_rt(rt2x00dev, RT3352))
                rt2800_bbp_write(rt2x00dev, 47, 0x48);
 
-- 
1.7.4.4




------------------------------

Message: 8
Date: Sat, 18 May 2013 14:03:30 +0200
From: [email protected]
To: [email protected]
Cc: [email protected]
Subject: [rt2x00-users] [PATCH 07/32] rt2800: initialize BBP_R47 on
        3352    subroutine
Message-ID: <[email protected]>

From: Stanislaw Gruszka <[email protected]>

Signed-off-by: Stanislaw Gruszka <[email protected]>
Acked-by: Helmut Schaa <[email protected]>
---
 drivers/net/wireless/rt2x00/rt2800lib.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c 
b/drivers/net/wireless/rt2x00/rt2800lib.c
index 84c7d4e..d7e6dba 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -3979,6 +3979,8 @@ static void rt2800_init_bbp_3352(struct rt2x00_dev 
*rt2x00dev)
        rt2800_bbp_write(rt2x00dev, 4, 0x50);
 
        rt2800_bbp_write(rt2x00dev, 31, 0x08);
+
+       rt2800_bbp_write(rt2x00dev, 47, 0x48);
 }
 
 static void rt2800_init_bbp_3390(struct rt2x00_dev *rt2x00dev)
@@ -4113,9 +4115,6 @@ static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
                return;
        }
 
-       if (rt2x00_rt(rt2x00dev, RT3352))
-               rt2800_bbp_write(rt2x00dev, 47, 0x48);
-
        rt2800_bbp_write(rt2x00dev, 65, 0x2c);
        rt2800_bbp_write(rt2x00dev, 66, 0x38);
 
-- 
1.7.4.4




------------------------------

Message: 9
Date: Sat, 18 May 2013 14:03:31 +0200
From: [email protected]
To: [email protected]
Cc: [email protected]
Subject: [rt2x00-users] [PATCH 08/32] rt2800: initialize BBP_R65 &
        BBP_R66 on all subroutines (except 5592)
Message-ID: <[email protected]>

From: Stanislaw Gruszka <[email protected]>

Signed-off-by: Stanislaw Gruszka <[email protected]>
Acked-by: Helmut Schaa <[email protected]>
---
 drivers/net/wireless/rt2x00/rt2800lib.c |   24 +++++++++++++++++++++---
 1 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c 
b/drivers/net/wireless/rt2x00/rt2800lib.c
index d7e6dba..0265cf7 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -3956,14 +3956,21 @@ static void rt2800_init_bbp_early(struct rt2x00_dev 
*rt2x00dev)
 static void rt2800_init_bbp_305x_soc(struct rt2x00_dev *rt2x00dev)
 {
        rt2800_bbp_write(rt2x00dev, 31, 0x08);
+
+       rt2800_bbp_write(rt2x00dev, 65, 0x2c);
+       rt2800_bbp_write(rt2x00dev, 66, 0x38);
 }
 
 static void rt2800_init_bbp_28xx(struct rt2x00_dev *rt2x00dev)
 {
+       rt2800_bbp_write(rt2x00dev, 65, 0x2c);
+       rt2800_bbp_write(rt2x00dev, 66, 0x38);
 }
 
 static void rt2800_init_bbp_30xx(struct rt2x00_dev *rt2x00dev)
 {
+       rt2800_bbp_write(rt2x00dev, 65, 0x2c);
+       rt2800_bbp_write(rt2x00dev, 66, 0x38);
 }
 
 static void rt2800_init_bbp_3290(struct rt2x00_dev *rt2x00dev)
@@ -3971,6 +3978,9 @@ static void rt2800_init_bbp_3290(struct rt2x00_dev 
*rt2x00dev)
        rt2800_bbp4_mac_if_ctrl(rt2x00dev);
 
        rt2800_bbp_write(rt2x00dev, 31, 0x08);
+
+       rt2800_bbp_write(rt2x00dev, 65, 0x2c);
+       rt2800_bbp_write(rt2x00dev, 66, 0x38);
 }
 
 static void rt2800_init_bbp_3352(struct rt2x00_dev *rt2x00dev)
@@ -3981,15 +3991,23 @@ static void rt2800_init_bbp_3352(struct rt2x00_dev 
*rt2x00dev)
        rt2800_bbp_write(rt2x00dev, 31, 0x08);
 
        rt2800_bbp_write(rt2x00dev, 47, 0x48);
+
+       rt2800_bbp_write(rt2x00dev, 65, 0x2c);
+       rt2800_bbp_write(rt2x00dev, 66, 0x38);
 }
 
 static void rt2800_init_bbp_3390(struct rt2x00_dev *rt2x00dev)
 {
+       rt2800_bbp_write(rt2x00dev, 65, 0x2c);
+       rt2800_bbp_write(rt2x00dev, 66, 0x38);
 }
 
 static void rt2800_init_bbp_3572(struct rt2x00_dev *rt2x00dev)
 {
        rt2800_bbp_write(rt2x00dev, 31, 0x08);
+
+       rt2800_bbp_write(rt2x00dev, 65, 0x2c);
+       rt2800_bbp_write(rt2x00dev, 66, 0x38);
 }
 
 static void rt2800_init_bbp_53xx(struct rt2x00_dev *rt2x00dev)
@@ -3997,6 +4015,9 @@ static void rt2800_init_bbp_53xx(struct rt2x00_dev 
*rt2x00dev)
        rt2800_bbp4_mac_if_ctrl(rt2x00dev);
 
        rt2800_bbp_write(rt2x00dev, 31, 0x08);
+
+       rt2800_bbp_write(rt2x00dev, 65, 0x2c);
+       rt2800_bbp_write(rt2x00dev, 66, 0x38);
 }
 
 static void rt2800_init_bbp_5592(struct rt2x00_dev *rt2x00dev)
@@ -4115,9 +4136,6 @@ static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
                return;
        }
 
-       rt2800_bbp_write(rt2x00dev, 65, 0x2c);
-       rt2800_bbp_write(rt2x00dev, 66, 0x38);
-
        if (rt2x00_rt(rt2x00dev, RT3290) ||
            rt2x00_rt(rt2x00dev, RT3352) ||
            rt2x00_rt(rt2x00dev, RT5390) ||
-- 
1.7.4.4




------------------------------

Subject: Digest Footer

_______________________________________________
users mailing list
[email protected]
http://rt2x00.serialmonkey.com/mailman/listinfo/users_rt2x00.serialmonkey.com


------------------------------

End of users Digest, Vol 51, Issue 18
*************************************

Reply via email to