const unsigned char *buffer, int count,
                            const struct h4_recv_pkt *pkts, int pkts_count)
 {
+       struct hci_uart *hu = hci_get_drvdata(hdev);
+       u8 alignment = hu->alignment;
+
        while (count) {
                int i, len;
 
+               /* remove padding bytes from buffer */
+               for (; hu->padding && count > 0; hu->padding--) {
+                       count--;
+                       buffer++;
+               }
+               if (!count)
+                       break;
+
                if (!skb) {
                        for (i = 0; i < pkts_count; i++) {
                                if (buffer[0] != (&pkts[i])->type)
                        }
 
                        if (!dlen) {
+                               hu->padding = (skb->len - 1) % alignment;
+                               hu->padding = (alignment - hu->padding) % alignment;
+
                                /* No more data, complete frame */
                                (&pkts[i])->recv(hdev, skb);
                                skb = NULL;
                        }
                } else {
+                       hu->padding = (skb->len - 1) % alignment;
+                       hu->padding = (alignment - hu->padding) % alignment;
+
                        /* Complete frame */
                        (&pkts[i])->recv(hdev, skb);
                        skb = NULL;
 
        hu->tty = tty;
        tty->receive_room = 65536;
 
+       /* disable alignment support by default */
+       hu->alignment = 1;
+       hu->padding = 0;
+
        INIT_WORK(&hu->init_ready, hci_uart_init_work);
        INIT_WORK(&hu->write_work, hci_uart_write_work);