merge driver code from neak's kernel