I found out in the kernel mailing list that somewhere in 2.6.20+ kernels, the libusb code changed somewhat. Apparently, if you have usb suspend enabled in the kernel, it will stop charging due to autosuspending. There is a patch that works around this issue by telling the kernel not to autosuspend when blackberries are connected via usb. I'm using it with usb suspend enabled in the patched kernel and it works.
If you need the link, i can't remember exactly how I found the patch, it was through google.