예제 #1
0
static int zd1211b_al7230b_set_channel(struct zd_rf *rf, u8 channel)
{
    int r;
    const u32 *rv = chan_rv[channel-1];
    struct zd_chip *chip = zd_rf_to_chip(rf);

    r = zd_iowrite16_locked(chip, 0x57, CR240);
    if (r)
        return r;
    r = zd_iowrite16_locked(chip, 0xe4, CR9);
    if (r)
        return r;

    /* PLL_OFF */
    r = zd_iowrite16_locked(chip, 0x2f, CR251);
    if (r)
        return r;
    r = zd_rfwritev_cr_locked(chip, std_rv, ARRAY_SIZE(std_rv));
    if (r)
        return r;

    r = zd_rfwrite_cr_locked(chip, 0x3c9000);
    if (r)
        return r;
    r = zd_rfwrite_cr_locked(chip, 0xf15d58);
    if (r)
        return r;

    r = zd_iowrite16a_locked(chip, ioreqs_sw, ARRAY_SIZE(ioreqs_sw));
    if (r)
        return r;

    r = zd_rfwritev_cr_locked(chip, rv, 2);
    if (r)
        return r;

    r = zd_rfwrite_cr_locked(chip, 0x3c9000);
    if (r)
        return r;

    r = zd_iowrite16_locked(chip, 0x7f, CR251);
    if (r)
        return r;

    return zd1211b_al7230b_finalize(chip);
}
예제 #2
0
static int zd1211_al7230b_set_channel(struct zd_rf *rf, u8 channel)
{
    int r;
    const u32 *rv = chan_rv[channel-1];
    struct zd_chip *chip = zd_rf_to_chip(rf);

    static const struct zd_ioreq16 ioreqs[] = {
        /* PLL_ON */
        { CR251, 0x3f },
        { CR203, 0x06 }, { CR240, 0x08 },
    };

    r = zd_iowrite16_locked(chip, 0x57, CR240);
    if (r)
        return r;

    /* PLL_OFF */
    r = zd_iowrite16_locked(chip, 0x2f, CR251);
    if (r)
        return r;

    r = zd_rfwritev_cr_locked(chip, std_rv, ARRAY_SIZE(std_rv));
    if (r)
        return r;

    r = zd_rfwrite_cr_locked(chip, 0x3c9000);
    if (r)
        return r;
    r = zd_rfwrite_cr_locked(chip, 0xf15d58);
    if (r)
        return r;

    r = zd_iowrite16a_locked(chip, ioreqs_sw, ARRAY_SIZE(ioreqs_sw));
    if (r)
        return r;

    r = zd_rfwritev_cr_locked(chip, rv, 2);
    if (r)
        return r;

    r = zd_rfwrite_cr_locked(chip, 0x3c9000);
    if (r)
        return r;

    return zd_iowrite16a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs));
}
예제 #3
0
static int zd1211b_al2230_set_channel(struct zd_rf *rf, u8 channel)
{
	int r;
	const u32 *rv = zd1211b_al2230_table[channel-1];
	struct zd_chip *chip = zd_rf_to_chip(rf);

	r = zd_iowrite16a_locked(chip, zd1211b_ioreqs_shared_1,
		ARRAY_SIZE(zd1211b_ioreqs_shared_1));
	if (r)
		return r;

	r = zd_rfwritev_cr_locked(chip, rv, 3);
	if (r)
		return r;

	return zd1211b_al2230_finalize_rf(chip);
}
예제 #4
0
static int zd1211b_al2230_init_hw(struct zd_rf *rf)
{
	int r;
	struct zd_chip *chip = zd_rf_to_chip(rf);

	static const struct zd_ioreq16 ioreqs1[] = {
		{ CR10,  0x89 }, { CR15,  0x20 },
		{ CR17,  0x2B }, /* for newest(3rd cut) AL2230 */
		{ CR23,  0x40 }, { CR24,  0x20 }, { CR26,  0x93 },
		{ CR28,  0x3e }, { CR29,  0x00 },
		{ CR33,  0x28 }, /* 5621 */
		{ CR34,  0x30 },
		{ CR35,  0x3e }, /* for newest(3rd cut) AL2230 */
		{ CR41,  0x24 }, { CR44,  0x32 },
		{ CR46,  0x99 }, /* for newest(3rd cut) AL2230 */
		{ CR47,  0x1e },

		/* ZD1211B 05.06.10 */
		{ CR48,  0x06 }, { CR49,  0xf9 }, { CR51,  0x01 },
		{ CR52,  0x80 }, { CR53,  0x7e }, { CR65,  0x00 },
		{ CR66,  0x00 }, { CR67,  0x00 }, { CR68,  0x00 },
		{ CR69,  0x28 },

		{ CR79,  0x58 }, { CR80,  0x30 }, { CR81,  0x30 },
		{ CR87,  0x0a }, { CR89,  0x04 },
		{ CR91,  0x00 }, /* 5621 */
		{ CR92,  0x0a },
		{ CR98,  0x8d }, /* 4804,  for 1212 new algorithm */
		{ CR99,  0x00 }, /* 5621 */
		{ CR101, 0x13 }, { CR102, 0x27 },
		{ CR106, 0x24 }, /* for newest(3rd cut) AL2230 */
		{ CR107, 0x2a },
		{ CR109, 0x13 }, /* 4804, for 1212 new algorithm */
		{ CR110, 0x1f }, /* 4804, for 1212 new algorithm */
		{ CR111, 0x1f }, { CR112, 0x1f }, { CR113, 0x27 },
		{ CR114, 0x27 },
		{ CR115, 0x26 }, /* 24->26 at 4902 for newest(3rd cut) AL2230 */
		{ CR116, 0x24 },
		{ CR117, 0xfa }, /* for 1211b */
		{ CR118, 0xfa }, /* for 1211b */
		{ CR119, 0x10 },
		{ CR120, 0x4f },
		{ CR121, 0x6c }, /* for 1211b */
		{ CR122, 0xfc }, /* E0->FC at 4902 */
		{ CR123, 0x57 }, /* 5623 */
		{ CR125, 0xad }, /* 4804, for 1212 new algorithm */
		{ CR126, 0x6c }, /* 5614 */
		{ CR127, 0x03 }, /* 4804, for 1212 new algorithm */
		{ CR137, 0x50 }, /* 5614 */
		{ CR138, 0xa8 },
		{ CR144, 0xac }, /* 5621 */
		{ CR150, 0x0d }, { CR252, 0x34 }, { CR253, 0x34 },
	};

	static const u32 rv1[] = {
		0x8cccd0,
		0x481dc0,
		0xcfff00,
		0x25a000,

		/* To improve AL2230 yield, improve phase noise, 4713 */
		0x25a000,
		0xa3b2f0,

		0x6da010, /* Reg6 update for MP versio */
		0xe36280, /* Modified by jxiao for Bor-Chin on 2004/08/02 */
		0x116000,
		0x9dc020, /* External control TX power (CR31) */
		0x5ddb00, /* RegA update for MP version */
		0xd99000, /* RegB update for MP version */
		0x3ffbd0, /* RegC update for MP version */
		0xb00000, /* RegD update for MP version */

		/* improve phase noise and remove phase calibration,4713 */
		0xf01a00,
	};

	static const struct zd_ioreq16 ioreqs2[] = {
		{ CR251, 0x2f }, /* shdnb(PLL_ON)=0 */
		{ CR251, 0x7f }, /* shdnb(PLL_ON)=1 */
	};

	static const u32 rv2[] = {
		/* To improve AL2230 yield, 4713 */
		0xf01b00,
		0xf01e00,
		0xf01a00,
	};

	static const struct zd_ioreq16 ioreqs3[] = {
		/* related to 6M band edge patching, happens unconditionally */
		{ CR128, 0x14 }, { CR129, 0x12 }, { CR130, 0x10 },
	};

	r = zd_iowrite16a_locked(chip, zd1211b_ioreqs_shared_1,
		ARRAY_SIZE(zd1211b_ioreqs_shared_1));
	if (r)
		return r;
	r = zd_iowrite16a_locked(chip, ioreqs1, ARRAY_SIZE(ioreqs1));
	if (r)
		return r;
	r = zd_rfwritev_cr_locked(chip, zd1211b_al2230_table[0], 3);
	if (r)
		return r;
	r = zd_rfwritev_cr_locked(chip, rv1, ARRAY_SIZE(rv1));
	if (r)
		return r;
	r = zd_iowrite16a_locked(chip, ioreqs2, ARRAY_SIZE(ioreqs2));
	if (r)
		return r;
	r = zd_rfwritev_cr_locked(chip, rv2, ARRAY_SIZE(rv2));
	if (r)
		return r;
	r = zd_iowrite16a_locked(chip, ioreqs3, ARRAY_SIZE(ioreqs3));
	if (r)
		return r;
	return zd1211b_al2230_finalize_rf(chip);
}
예제 #5
0
static int zd1211_al7230b_init_hw(struct zd_rf *rf)
{
    int r;
    struct zd_chip *chip = zd_rf_to_chip(rf);

    /* All of these writes are identical to AL2230 unless otherwise
     * specified */
    static const struct zd_ioreq16 ioreqs_1[] = {
        /* This one is 7230-specific, and happens before the rest */
        { CR240,  0x57 },
        { },

        { CR15,   0x20 }, { CR23,   0x40 }, { CR24,  0x20 },
        { CR26,   0x11 }, { CR28,   0x3e }, { CR29,  0x00 },
        { CR44,   0x33 },
        /* This value is different for 7230 (was: 0x2a) */
        { CR106,  0x22 },
        { CR107,  0x1a }, { CR109,  0x09 }, { CR110,  0x27 },
        { CR111,  0x2b }, { CR112,  0x2b }, { CR119,  0x0a },
        /* This happened further down in AL2230,
         * and the value changed (was: 0xe0) */
        { CR122,  0xfc },
        { CR10,   0x89 },
        /* for newest (3rd cut) AL2300 */
        { CR17,   0x28 },
        { CR26,   0x93 }, { CR34,   0x30 },
        /* for newest (3rd cut) AL2300 */
        { CR35,   0x3e },
        { CR41,   0x24 }, { CR44,   0x32 },
        /* for newest (3rd cut) AL2300 */
        { CR46,   0x96 },
        { CR47,   0x1e }, { CR79,   0x58 }, { CR80,  0x30 },
        { CR81,   0x30 }, { CR87,   0x0a }, { CR89,  0x04 },
        { CR92,   0x0a }, { CR99,   0x28 },
        /* This value is different for 7230 (was: 0x00) */
        { CR100,  0x02 },
        { CR101,  0x13 }, { CR102,  0x27 },
        /* This value is different for 7230 (was: 0x24) */
        { CR106,  0x22 },
        /* This value is different for 7230 (was: 0x2a) */
        { CR107,  0x3f },
        { CR109,  0x09 },
        /* This value is different for 7230 (was: 0x13) */
        { CR110,  0x1f },
        { CR111,  0x1f }, { CR112,  0x1f }, { CR113, 0x27 },
        { CR114,  0x27 },
        /* for newest (3rd cut) AL2300 */
        { CR115,  0x24 },
        /* This value is different for 7230 (was: 0x24) */
        { CR116,  0x3f },
        /* This value is different for 7230 (was: 0xf4) */
        { CR117,  0xfa },
        { CR118,  0xfc }, { CR119,  0x10 }, { CR120, 0x4f },
        { CR121,  0x77 }, { CR137,  0x88 },
        /* This one is 7230-specific */
        { CR138,  0xa8 },
        /* This value is different for 7230 (was: 0xff) */
        { CR252,  0x34 },
        /* This value is different for 7230 (was: 0xff) */
        { CR253,  0x34 },

        /* PLL_OFF */
        { CR251, 0x2f },
    };

    static const struct zd_ioreq16 ioreqs_2[] = {
        { CR251, 0x3f }, /* PLL_ON */
        { CR128, 0x14 }, { CR129, 0x12 }, { CR130, 0x10 },
        { CR38,  0x38 }, { CR136, 0xdf },
    };

    r = zd_iowrite16a_locked(chip, ioreqs_1, ARRAY_SIZE(ioreqs_1));
    if (r)
        return r;

    r = zd_rfwritev_cr_locked(chip, chan_rv[0], ARRAY_SIZE(chan_rv[0]));
    if (r)
        return r;

    r = zd_rfwritev_cr_locked(chip, std_rv, ARRAY_SIZE(std_rv));
    if (r)
        return r;

    r = zd_rfwritev_cr_locked(chip, rv_init1, ARRAY_SIZE(rv_init1));
    if (r)
        return r;

    r = zd_iowrite16a_locked(chip, ioreqs_2, ARRAY_SIZE(ioreqs_2));
    if (r)
        return r;

    r = zd_rfwritev_cr_locked(chip, rv_init2, ARRAY_SIZE(rv_init2));
    if (r)
        return r;

    r = zd_iowrite16_locked(chip, 0x06, CR203);
    if (r)
        return r;
    r = zd_iowrite16_locked(chip, 0x80, CR240);
    if (r)
        return r;

    return 0;
}
예제 #6
0
static int zd1211b_al7230b_init_hw(struct zd_rf *rf)
{
    int r;
    struct zd_chip *chip = zd_rf_to_chip(rf);

    static const struct zd_ioreq16 ioreqs_1[] = {
        { CR240, 0x57 }, { CR9,   0x9 },
        { },
        { CR10,  0x8b }, { CR15,  0x20 },
        { CR17,  0x2B }, /* for newest (3rd cut) AL2230 */
        { CR20,  0x10 }, /* 4N25->Stone Request */
        { CR23,  0x40 }, { CR24,  0x20 }, { CR26,  0x93 },
        { CR28,  0x3e }, { CR29,  0x00 },
        { CR33,  0x28 }, /* 5613 */
        { CR34,  0x30 },
        { CR35,  0x3e }, /* for newest (3rd cut) AL2230 */
        { CR41,  0x24 }, { CR44,  0x32 },
        { CR46,  0x99 }, /* for newest (3rd cut) AL2230 */
        { CR47,  0x1e },

        /* ZD1215 5610 */
        { CR48,  0x00 }, { CR49,  0x00 }, { CR51,  0x01 },
        { CR52,  0x80 }, { CR53,  0x7e }, { CR65,  0x00 },
        { CR66,  0x00 }, { CR67,  0x00 }, { CR68,  0x00 },
        { CR69,  0x28 },

        { CR79,  0x58 }, { CR80,  0x30 }, { CR81,  0x30 },
        { CR87,  0x0A }, { CR89,  0x04 },
        { CR90,  0x58 }, /* 5112 */
        { CR91,  0x00 }, /* 5613 */
        { CR92,  0x0a },
        { CR98,  0x8d }, /* 4804, for 1212 new algorithm */
        { CR99,  0x00 }, { CR100, 0x02 }, { CR101, 0x13 },
        { CR102, 0x27 },
        { CR106, 0x20 }, /* change to 0x24 for AL7230B */
        { CR109, 0x13 }, /* 4804, for 1212 new algorithm */
        { CR112, 0x1f },
    };

    static const struct zd_ioreq16 ioreqs_new_phy[] = {
        { CR107, 0x28 },
        { CR110, 0x1f }, /* 5127, 0x13->0x1f */
        { CR111, 0x1f }, /* 0x13 to 0x1f for AL7230B */
        { CR116, 0x2a }, { CR118, 0xfa }, { CR119, 0x12 },
        { CR121, 0x6c }, /* 5613 */
    };

    static const struct zd_ioreq16 ioreqs_old_phy[] = {
        { CR107, 0x24 },
        { CR110, 0x13 }, /* 5127, 0x13->0x1f */
        { CR111, 0x13 }, /* 0x13 to 0x1f for AL7230B */
        { CR116, 0x24 }, { CR118, 0xfc }, { CR119, 0x11 },
        { CR121, 0x6a }, /* 5613 */
    };

    static const struct zd_ioreq16 ioreqs_2[] = {
        { CR113, 0x27 }, { CR114, 0x27 }, { CR115, 0x24 },
        { CR117, 0xfa }, { CR120, 0x4f },
        { CR122, 0xfc }, /* E0->FCh at 4901 */
        { CR123, 0x57 }, /* 5613 */
        { CR125, 0xad }, /* 4804, for 1212 new algorithm */
        { CR126, 0x6c }, /* 5613 */
        { CR127, 0x03 }, /* 4804, for 1212 new algorithm */
        { CR130, 0x10 },
        { CR131, 0x00 }, /* 5112 */
        { CR137, 0x50 }, /* 5613 */
        { CR138, 0xa8 }, /* 5112 */
        { CR144, 0xac }, /* 5613 */
        { CR148, 0x40 }, /* 5112 */
        { CR149, 0x40 }, /* 4O07, 50->40 */
        { CR150, 0x1a }, /* 5112, 0C->1A */
        { CR252, 0x34 }, { CR253, 0x34 },
        { CR251, 0x2f }, /* PLL_OFF */
    };

    static const struct zd_ioreq16 ioreqs_3[] = {
        { CR251, 0x7f }, /* PLL_ON */
        { CR128, 0x14 }, { CR129, 0x12 }, { CR130, 0x10 },
        { CR38,  0x38 }, { CR136, 0xdf },
    };

    r = zd_iowrite16a_locked(chip, ioreqs_1, ARRAY_SIZE(ioreqs_1));
    if (r)
        return r;

    if (chip->new_phy_layout)
        r = zd_iowrite16a_locked(chip, ioreqs_new_phy,
                                 ARRAY_SIZE(ioreqs_new_phy));
    else
        r = zd_iowrite16a_locked(chip, ioreqs_old_phy,
                                 ARRAY_SIZE(ioreqs_old_phy));
    if (r)
        return r;

    r = zd_iowrite16a_locked(chip, ioreqs_2, ARRAY_SIZE(ioreqs_2));
    if (r)
        return r;

    r = zd_rfwritev_cr_locked(chip, chan_rv[0], ARRAY_SIZE(chan_rv[0]));
    if (r)
        return r;

    r = zd_rfwritev_cr_locked(chip, std_rv, ARRAY_SIZE(std_rv));
    if (r)
        return r;

    r = zd_rfwritev_cr_locked(chip, rv_init1, ARRAY_SIZE(rv_init1));
    if (r)
        return r;

    r = zd_iowrite16a_locked(chip, ioreqs_3, ARRAY_SIZE(ioreqs_3));
    if (r)
        return r;

    r = zd_rfwritev_cr_locked(chip, rv_init2, ARRAY_SIZE(rv_init2));
    if (r)
        return r;

    return zd1211b_al7230b_finalize(chip);
}