[Samsung Epic 4G Touch] frifox:
look at kernel source file /Kernel/drivers/power/max8997-charger.c, line 171:

static int max8997_set_charging_current(struct chg_data *chg, int chg_current)
{
struct i2c_client *i2c = chg->max8997->i2c;
int ret;
u8 val;

if (chg_current < 200 || chg_current > 950)
return -EINVAL;

[COLOR=Red][B]val = ((chg_current - 200) / 50) & 0xf;[/B][/COLOR]

dev_info(chg->dev, "%s: charging current=%d", __func__, chg_current);
ret = max8997_update_reg(i2c, MAX8997_REG_MBCCTRL4,
(val << MBCICHFC_SHIFT), MBCICHFC_MASK);
if (ret)
dev_err(chg->dev, "%s: fail to write chg current(%d)\n",
__func__, ret);

return ret;
}

above we can see that charging rate is calculated as [x * 50 + 200] with x being the bit set on lines 220 & 229:

static int max8997_enable_charging_x(struct chg_data *chg, int charge_type)
{
struct i2c_client *i2c = chg->max8997->i2c;
int ret;
u8 val, mask;

/* enable charging */
if (charge_type == POWER_SUPPLY_CHARGE_TYPE_FAST) {
/* ac */
dev_info(chg->dev, "%s: TA charging", __func__);
/* set fast charging current : [COLOR=DarkRed]650mA[/COLOR] */
ret = max8997_update_reg(i2c, MAX8997_REG_MBCCTRL4,
[B] [COLOR=Red](9 << MBCICHFC_SHIFT), MBCICHFC_MASK);[/COLOR][/B]
if (ret)
goto err;

} else if (charge_type == POWER_SUPPLY_CHARGE_TYPE_TRICKLE) {
/* usb */
dev_info(chg->dev, "%s: USB charging", __func__);
/* set fast charging current : [COLOR=DarkRed]450mA [/COLOR]*/
ret = max8997_update_reg(i2c, MAX8997_REG_MBCCTRL4,
[COLOR=Red][B](5 << MBCICHFC_SHIFT), MBCICHFC_MASK);[/B][/COLOR]
if (ret)
goto err;
} else {
dev_err(chg->dev, "%s: invalid arg\n", __func__);
ret = -EINVAL;
goto err;
}

/* set auto stop disable */
ret = max8997_update_reg(i2c, MAX8997_REG_MBCCTRL6,
(0 << AUTOSTOP_SHIFT), AUTOSTOP_MASK);
if (ret)
goto err;

/* set fast charging enable and main battery charging enable */
val = (1 << MBCHOSTEN_SHIFT) | (1 << VCHGR_FC_SHIFT);
mask = MBCHOSTEN_MASK | VCHGR_FC_MASK;
ret = max8997_update_reg(i2c, MAX8997_REG_MBCCTRL2, val, mask);
if (ret)
goto err;

return 0;
err:
dev_err(chg->dev, "%s: max8997 update reg error!(%d)\n", __func__, ret);
return ret;
}

the bits 9 & 5 above set AC charging to 650mA (9*50+200) and USB charging to 450mA (5*50+200).

Battery Monitor Widget says that my phone charges at 200mA with display on, which makes sense once you assume that phone runs off usb (sucks about 250mA w/ display on) and uses the rest of available 450mA to actually charge the battery (200mA).

so there ya go, to get faster charge either get a different usb cable (d-/d+ pins shortened, or fit a 200k resistor there) or change those 9 & 5 bits to 15 and recompile the kernel to increase charging to full 950mAh. of course, your computer's usb port will not have enough power so instead use either a wall charger or use one of those usb cables that connect to 2 usb ports simultaneously and enjoy speedy charging. oh, and do watch the temperatures as i'm assuming super-charging will heat up your phone in no time :D

oh, and one more thing. while you're digging though the source, check out /Kernel/drivers/misc/max8997-muic.c, lines 90 to 113:

/* MAX8997 MUIC CHG_TYP setting values */
enum {
/* No Valid voltage at VB (Vvb < Vvbdet) */
CHGTYP_NO_VOLTAGE = 0x00,
/* Unknown (D+/D- does not present a valid USB charger signature) */
CHGTYP_USB = 0x01,
/* [COLOR=DarkRed]Charging Downstream Port[/COLOR] */
CHGTYP_DOWNSTREAM_PORT = 0x02,
/* [COLOR=DarkRed]Dedicated Charger (D+/D- shorted)[/COLOR] */
CHGTYP_DEDICATED_CHGR = 0x03,
/* [COLOR=DarkRed]Special 500mA charger, max current 500mA[/COLOR] */
CHGTYP_500MA = 0x04,
/* [COLOR=DarkRed]Special 1A charger, max current 1A[/COLOR] */
CHGTYP_1A = 0x05,
/* [COLOR=DarkRed]Reserved for Future Use[/COLOR] */
CHGTYP_RFU = 0x06,
/* [COLOR=DarkRed]Dead Battery Charging, max current 100mA[/COLOR] */
CHGTYP_DB_100MA = 0x07,
CHGTYP_MAX,

CHGTYP_INIT,
CHGTYP_MIN = CHGTYP_NO_VOLTAGE
};

from this i can assume that our phones technically can charge with rates up to 1000mA depending on what cable and/or adapter you use :)