- patches.apparmor/remove_suid_new_case_in_2.6.22.diff: Merge fix.
[linux-flexiantxendom0-3.2.10.git] / drivers / net / wireless / zd1211rw / zd_chip.c
index 87ee3ee..95b4a2a 100644 (file)
@@ -67,11 +67,12 @@ static int scnprint_id(struct zd_chip *chip, char *buffer, size_t size)
        i += scnprint_mac_oui(chip->e2p_mac, buffer+i, size-i);
        i += scnprintf(buffer+i, size-i, " ");
        i += zd_rf_scnprint_id(&chip->rf, buffer+i, size-i);
-       i += scnprintf(buffer+i, size-i, " pa%1x %c%c%c%c", chip->pa_type,
+       i += scnprintf(buffer+i, size-i, " pa%1x %c%c%c%c%c", chip->pa_type,
                chip->patch_cck_gain ? 'g' : '-',
                chip->patch_cr157 ? '7' : '-',
                chip->patch_6m_band_edge ? '6' : '-',
-               chip->new_phy_layout ? 'N' : '-');
+               chip->new_phy_layout ? 'N' : '-',
+               chip->al2230s_bit ? 'S' : '-');
        return i;
 }
 
@@ -114,7 +115,7 @@ int zd_ioread32v_locked(struct zd_chip *chip, u32 *values, const zd_addr_t *addr
        /* Allocate a single memory block for values and addresses. */
        count16 = 2*count;
        a16 = (zd_addr_t *) kmalloc(count16 * (sizeof(zd_addr_t) + sizeof(u16)),
-                                  GFP_NOFS);
+                                  GFP_KERNEL);
        if (!a16) {
                dev_dbg_f(zd_chip_dev(chip),
                          "error ENOMEM in allocation of a16\n");
@@ -163,7 +164,7 @@ int _zd_iowrite32v_locked(struct zd_chip *chip, const struct zd_ioreq32 *ioreqs,
 
        /* Allocate a single memory block for values and addresses. */
        count16 = 2*count;
-       ioreqs16 = kmalloc(count16 * sizeof(struct zd_ioreq16), GFP_NOFS);
+       ioreqs16 = kmalloc(count16 * sizeof(struct zd_ioreq16), GFP_KERNEL);
        if (!ioreqs16) {
                r = -ENOMEM;
                dev_dbg_f(zd_chip_dev(chip),
@@ -614,16 +615,24 @@ static int patch_cr157(struct zd_chip *chip)
  * Vendor driver says: for FCC regulation, enabled per HWFeature 6M band edge
  * bit (for AL2230, AL2230S)
  */
-static int patch_6m_band_edge(struct zd_chip *chip, int channel)
+static int patch_6m_band_edge(struct zd_chip *chip, u8 channel)
+{
+       ZD_ASSERT(mutex_is_locked(&chip->mutex));
+       if (!chip->patch_6m_band_edge)
+               return 0;
+
+       return zd_rf_patch_6m_band_edge(&chip->rf, channel);
+}
+
+/* Generic implementation of 6M band edge patching, used by most RFs via
+ * zd_rf_generic_patch_6m() */
+int zd_chip_generic_patch_6m_band(struct zd_chip *chip, int channel)
 {
        struct zd_ioreq16 ioreqs[] = {
                { CR128, 0x14 }, { CR129, 0x12 }, { CR130, 0x10 },
                { CR47,  0x1e },
        };
 
-       if (!chip->patch_6m_band_edge || !chip->rf.patch_6m_band_edge)
-               return 0;
-
        /* FIXME: Channel 11 is not the edge for all regulatory domains. */
        if (channel == 1 || channel == 11)
                ioreqs[0].value = 0x12;
@@ -683,17 +692,17 @@ static int zd1211_hw_reset_phy(struct zd_chip *chip)
                { CR111, 0x27 }, { CR112, 0x27 }, { CR113, 0x27 },
                { CR114, 0x27 }, { CR115, 0x26 }, { CR116, 0x24 },
                { CR117, 0xfc }, { CR118, 0xfa }, { CR120, 0x4f },
-               { CR123, 0x27 }, { CR125, 0xaa }, { CR127, 0x03 },
-               { CR128, 0x14 }, { CR129, 0x12 }, { CR130, 0x10 },
-               { CR131, 0x0C }, { CR136, 0xdf }, { CR137, 0x40 },
-               { CR138, 0xa0 }, { CR139, 0xb0 }, { CR140, 0x99 },
-               { CR141, 0x82 }, { CR142, 0x54 }, { CR143, 0x1c },
-               { CR144, 0x6c }, { CR147, 0x07 }, { CR148, 0x4c },
-               { CR149, 0x50 }, { CR150, 0x0e }, { CR151, 0x18 },
-               { CR160, 0xfe }, { CR161, 0xee }, { CR162, 0xaa },
-               { CR163, 0xfa }, { CR164, 0xfa }, { CR165, 0xea },
-               { CR166, 0xbe }, { CR167, 0xbe }, { CR168, 0x6a },
-               { CR169, 0xba }, { CR170, 0xba }, { CR171, 0xba },
+               { CR125, 0xaa }, { CR127, 0x03 }, { CR128, 0x14 },
+               { CR129, 0x12 }, { CR130, 0x10 }, { CR131, 0x0C },
+               { CR136, 0xdf }, { CR137, 0x40 }, { CR138, 0xa0 },
+               { CR139, 0xb0 }, { CR140, 0x99 }, { CR141, 0x82 },
+               { CR142, 0x54 }, { CR143, 0x1c }, { CR144, 0x6c },
+               { CR147, 0x07 }, { CR148, 0x4c }, { CR149, 0x50 },
+               { CR150, 0x0e }, { CR151, 0x18 }, { CR160, 0xfe },
+               { CR161, 0xee }, { CR162, 0xaa }, { CR163, 0xfa },
+               { CR164, 0xfa }, { CR165, 0xea }, { CR166, 0xbe },
+               { CR167, 0xbe }, { CR168, 0x6a }, { CR169, 0xba },
+               { CR170, 0xba }, { CR171, 0xba },
                /* Note: CR204 must lead the CR203 */
                { CR204, 0x7d },
                { },