drivers/bluetooth/hci_h5.c
1000
serdev_device_set_baudrate(h5->hu->serdev, 115200);
drivers/bluetooth/hci_h5.c
1002
if (!test_bit(H5_WAKEUP_DISABLE, &h5->flags)) {
drivers/bluetooth/hci_h5.c
1003
pm_runtime_set_active(&h5->hu->serdev->dev);
drivers/bluetooth/hci_h5.c
1004
pm_runtime_use_autosuspend(&h5->hu->serdev->dev);
drivers/bluetooth/hci_h5.c
1005
pm_runtime_set_autosuspend_delay(&h5->hu->serdev->dev,
drivers/bluetooth/hci_h5.c
1007
pm_runtime_enable(&h5->hu->serdev->dev);
drivers/bluetooth/hci_h5.c
1011
gpiod_set_value_cansleep(h5->enable_gpio, 0);
drivers/bluetooth/hci_h5.c
1012
gpiod_set_value_cansleep(h5->device_wake_gpio, 0);
drivers/bluetooth/hci_h5.c
1016
gpiod_set_value_cansleep(h5->enable_gpio, 1);
drivers/bluetooth/hci_h5.c
1017
gpiod_set_value_cansleep(h5->device_wake_gpio, 1);
drivers/bluetooth/hci_h5.c
1021
static void h5_btrtl_close(struct h5 *h5)
drivers/bluetooth/hci_h5.c
1023
if (!test_bit(H5_WAKEUP_DISABLE, &h5->flags))
drivers/bluetooth/hci_h5.c
1024
pm_runtime_disable(&h5->hu->serdev->dev);
drivers/bluetooth/hci_h5.c
1026
gpiod_set_value_cansleep(h5->device_wake_gpio, 0);
drivers/bluetooth/hci_h5.c
1027
gpiod_set_value_cansleep(h5->enable_gpio, 0);
drivers/bluetooth/hci_h5.c
1036
static int h5_btrtl_suspend(struct h5 *h5)
drivers/bluetooth/hci_h5.c
1038
serdev_device_set_flow_control(h5->hu->serdev, false);
drivers/bluetooth/hci_h5.c
1039
gpiod_set_value_cansleep(h5->device_wake_gpio, 0);
drivers/bluetooth/hci_h5.c
1041
if (test_bit(H5_WAKEUP_DISABLE, &h5->flags))
drivers/bluetooth/hci_h5.c
1042
gpiod_set_value_cansleep(h5->enable_gpio, 0);
drivers/bluetooth/hci_h5.c
1067
static int h5_btrtl_resume(struct h5 *h5)
drivers/bluetooth/hci_h5.c
1069
if (test_bit(H5_WAKEUP_DISABLE, &h5->flags)) {
drivers/bluetooth/hci_h5.c
1079
reprobe->dev = get_device(&h5->hu->serdev->dev);
drivers/bluetooth/hci_h5.c
1082
gpiod_set_value_cansleep(h5->device_wake_gpio, 1);
drivers/bluetooth/hci_h5.c
1084
if (test_bit(H5_HW_FLOW_CONTROL, &h5->flags))
drivers/bluetooth/hci_h5.c
1085
serdev_device_set_flow_control(h5->hu->serdev, true);
drivers/bluetooth/hci_h5.c
113
int (*setup)(struct h5 *h5);
drivers/bluetooth/hci_h5.c
114
void (*open)(struct h5 *h5);
drivers/bluetooth/hci_h5.c
115
void (*close)(struct h5 *h5);
drivers/bluetooth/hci_h5.c
116
int (*suspend)(struct h5 *h5);
drivers/bluetooth/hci_h5.c
117
int (*resume)(struct h5 *h5);
drivers/bluetooth/hci_h5.c
127
static void h5_reset_rx(struct h5 *h5);
drivers/bluetooth/hci_h5.c
131
struct h5 *h5 = hu->priv;
drivers/bluetooth/hci_h5.c
142
skb_queue_tail(&h5->unrel, nskb);
drivers/bluetooth/hci_h5.c
145
static u8 h5_cfg_field(struct h5 *h5)
drivers/bluetooth/hci_h5.c
148
return (h5->tx_win & 0x07) | 0x10;
drivers/bluetooth/hci_h5.c
155
struct h5 *h5 = timer_container_of(h5, t, timer);
drivers/bluetooth/hci_h5.c
156
struct hci_uart *hu = h5->hu;
drivers/bluetooth/hci_h5.c
162
if (h5->state == H5_UNINITIALIZED)
drivers/bluetooth/hci_h5.c
165
if (h5->state == H5_INITIALIZED) {
drivers/bluetooth/hci_h5.c
166
conf_req[2] = h5_cfg_field(h5);
drivers/bluetooth/hci_h5.c
170
if (h5->state != H5_ACTIVE) {
drivers/bluetooth/hci_h5.c
171
mod_timer(&h5->timer, jiffies + H5_SYNC_TIMEOUT);
drivers/bluetooth/hci_h5.c
175
if (h5->sleep != H5_AWAKE) {
drivers/bluetooth/hci_h5.c
176
h5->sleep = H5_SLEEPING;
drivers/bluetooth/hci_h5.c
180
BT_DBG("hu %p retransmitting %u pkts", hu, h5->unack.qlen);
drivers/bluetooth/hci_h5.c
182
spin_lock_irqsave_nested(&h5->unack.lock, flags, SINGLE_DEPTH_NESTING);
drivers/bluetooth/hci_h5.c
184
while ((skb = __skb_dequeue_tail(&h5->unack)) != NULL) {
drivers/bluetooth/hci_h5.c
185
h5->tx_seq = (h5->tx_seq - 1) & 0x07;
drivers/bluetooth/hci_h5.c
186
skb_queue_head(&h5->rel, skb);
drivers/bluetooth/hci_h5.c
189
spin_unlock_irqrestore(&h5->unack.lock, flags);
drivers/bluetooth/hci_h5.c
197
struct h5 *h5 = hu->priv;
drivers/bluetooth/hci_h5.c
201
h5->state = H5_UNINITIALIZED;
drivers/bluetooth/hci_h5.c
203
timer_delete(&h5->timer);
drivers/bluetooth/hci_h5.c
205
skb_queue_purge(&h5->rel);
drivers/bluetooth/hci_h5.c
206
skb_queue_purge(&h5->unrel);
drivers/bluetooth/hci_h5.c
207
skb_queue_purge(&h5->unack);
drivers/bluetooth/hci_h5.c
209
h5->tx_seq = 0;
drivers/bluetooth/hci_h5.c
210
h5->tx_ack = 0;
drivers/bluetooth/hci_h5.c
218
struct h5 *h5;
drivers/bluetooth/hci_h5.c
223
h5 = serdev_device_get_drvdata(hu->serdev);
drivers/bluetooth/hci_h5.c
225
h5 = kzalloc_obj(*h5);
drivers/bluetooth/hci_h5.c
226
if (!h5)
drivers/bluetooth/hci_h5.c
230
hu->priv = h5;
drivers/bluetooth/hci_h5.c
231
h5->hu = hu;
drivers/bluetooth/hci_h5.c
233
skb_queue_head_init(&h5->unack);
drivers/bluetooth/hci_h5.c
234
skb_queue_head_init(&h5->rel);
drivers/bluetooth/hci_h5.c
235
skb_queue_head_init(&h5->unrel);
drivers/bluetooth/hci_h5.c
237
h5_reset_rx(h5);
drivers/bluetooth/hci_h5.c
239
timer_setup(&h5->timer, h5_timed_event, 0);
drivers/bluetooth/hci_h5.c
241
h5->tx_win = H5_TX_WIN_MAX;
drivers/bluetooth/hci_h5.c
243
if (h5->vnd && h5->vnd->open)
drivers/bluetooth/hci_h5.c
244
h5->vnd->open(h5);
drivers/bluetooth/hci_h5.c
252
mod_timer(&h5->timer, jiffies + 1);
drivers/bluetooth/hci_h5.c
259
struct h5 *h5 = hu->priv;
drivers/bluetooth/hci_h5.c
261
timer_delete_sync(&h5->timer);
drivers/bluetooth/hci_h5.c
263
skb_queue_purge(&h5->unack);
drivers/bluetooth/hci_h5.c
264
skb_queue_purge(&h5->rel);
drivers/bluetooth/hci_h5.c
265
skb_queue_purge(&h5->unrel);
drivers/bluetooth/hci_h5.c
267
kfree_skb(h5->rx_skb);
drivers/bluetooth/hci_h5.c
268
h5->rx_skb = NULL;
drivers/bluetooth/hci_h5.c
270
if (h5->vnd && h5->vnd->close)
drivers/bluetooth/hci_h5.c
271
h5->vnd->close(h5);
drivers/bluetooth/hci_h5.c
274
kfree(h5);
drivers/bluetooth/hci_h5.c
281
struct h5 *h5 = hu->priv;
drivers/bluetooth/hci_h5.c
283
if (h5->vnd && h5->vnd->setup)
drivers/bluetooth/hci_h5.c
284
return h5->vnd->setup(h5);
drivers/bluetooth/hci_h5.c
289
static void h5_pkt_cull(struct h5 *h5)
drivers/bluetooth/hci_h5.c
296
spin_lock_irqsave(&h5->unack.lock, flags);
drivers/bluetooth/hci_h5.c
298
to_remove = skb_queue_len(&h5->unack);
drivers/bluetooth/hci_h5.c
302
seq = h5->tx_seq;
drivers/bluetooth/hci_h5.c
305
if (h5->rx_ack == seq)
drivers/bluetooth/hci_h5.c
312
if (seq != h5->rx_ack)
drivers/bluetooth/hci_h5.c
316
skb_queue_walk_safe(&h5->unack, skb, tmp) {
drivers/bluetooth/hci_h5.c
320
__skb_unlink(skb, &h5->unack);
drivers/bluetooth/hci_h5.c
324
if (skb_queue_empty(&h5->unack))
drivers/bluetooth/hci_h5.c
325
timer_delete(&h5->timer);
drivers/bluetooth/hci_h5.c
328
spin_unlock_irqrestore(&h5->unack.lock, flags);
drivers/bluetooth/hci_h5.c
333
struct h5 *h5 = hu->priv;
drivers/bluetooth/hci_h5.c
341
const unsigned char *hdr = h5->rx_skb->data;
drivers/bluetooth/hci_h5.c
342
const unsigned char *data = &h5->rx_skb->data[4];
drivers/bluetooth/hci_h5.c
352
conf_req[2] = h5_cfg_field(h5);
drivers/bluetooth/hci_h5.c
355
if (h5->state == H5_ACTIVE)
drivers/bluetooth/hci_h5.c
359
if (h5->state == H5_ACTIVE)
drivers/bluetooth/hci_h5.c
361
h5->state = H5_INITIALIZED;
drivers/bluetooth/hci_h5.c
368
h5->tx_win = (data[2] & 0x07);
drivers/bluetooth/hci_h5.c
369
assign_bit(H5_CRC, &h5->flags, data[2] & 0x10);
drivers/bluetooth/hci_h5.c
371
BT_DBG("Three-wire init complete. tx_win %u", h5->tx_win);
drivers/bluetooth/hci_h5.c
372
h5->state = H5_ACTIVE;
drivers/bluetooth/hci_h5.c
377
h5->sleep = H5_SLEEPING;
drivers/bluetooth/hci_h5.c
381
h5->sleep = H5_AWAKE;
drivers/bluetooth/hci_h5.c
385
h5->sleep = H5_AWAKE;
drivers/bluetooth/hci_h5.c
396
struct h5 *h5 = hu->priv;
drivers/bluetooth/hci_h5.c
397
const unsigned char *hdr = h5->rx_skb->data;
drivers/bluetooth/hci_h5.c
400
h5->tx_ack = (h5->tx_ack + 1) % 8;
drivers/bluetooth/hci_h5.c
401
set_bit(H5_TX_ACK_REQ, &h5->flags);
drivers/bluetooth/hci_h5.c
405
h5->rx_ack = H5_HDR_ACK(hdr);
drivers/bluetooth/hci_h5.c
407
h5_pkt_cull(h5);
drivers/bluetooth/hci_h5.c
414
hci_skb_pkt_type(h5->rx_skb) = H5_HDR_PKT_TYPE(hdr);
drivers/bluetooth/hci_h5.c
417
skb_pull(h5->rx_skb, 4);
drivers/bluetooth/hci_h5.c
419
hci_recv_frame(hu->hdev, h5->rx_skb);
drivers/bluetooth/hci_h5.c
420
h5->rx_skb = NULL;
drivers/bluetooth/hci_h5.c
429
h5_reset_rx(h5);
drivers/bluetooth/hci_h5.c
434
struct h5 *h5 = hu->priv;
drivers/bluetooth/hci_h5.c
435
const unsigned char *hdr = h5->rx_skb->data;
drivers/bluetooth/hci_h5.c
446
h5_reset_rx(h5);
drivers/bluetooth/hci_h5.c
449
skb_trim(h5->rx_skb, 4 + H5_HDR_LEN(hdr));
drivers/bluetooth/hci_h5.c
458
struct h5 *h5 = hu->priv;
drivers/bluetooth/hci_h5.c
459
const unsigned char *hdr = h5->rx_skb->data;
drivers/bluetooth/hci_h5.c
462
h5->rx_func = h5_rx_crc;
drivers/bluetooth/hci_h5.c
463
h5->rx_pending = 2;
drivers/bluetooth/hci_h5.c
473
struct h5 *h5 = hu->priv;
drivers/bluetooth/hci_h5.c
474
const unsigned char *hdr = h5->rx_skb->data;
drivers/bluetooth/hci_h5.c
483
h5_reset_rx(h5);
drivers/bluetooth/hci_h5.c
487
if (H5_HDR_RELIABLE(hdr) && H5_HDR_SEQ(hdr) != h5->tx_ack) {
drivers/bluetooth/hci_h5.c
489
H5_HDR_SEQ(hdr), h5->tx_ack);
drivers/bluetooth/hci_h5.c
490
set_bit(H5_TX_ACK_REQ, &h5->flags);
drivers/bluetooth/hci_h5.c
492
h5_reset_rx(h5);
drivers/bluetooth/hci_h5.c
496
if (h5->state != H5_ACTIVE &&
drivers/bluetooth/hci_h5.c
499
h5_reset_rx(h5);
drivers/bluetooth/hci_h5.c
503
h5->rx_func = h5_rx_payload;
drivers/bluetooth/hci_h5.c
504
h5->rx_pending = H5_HDR_LEN(hdr);
drivers/bluetooth/hci_h5.c
511
struct h5 *h5 = hu->priv;
drivers/bluetooth/hci_h5.c
516
h5->rx_func = h5_rx_3wire_hdr;
drivers/bluetooth/hci_h5.c
517
h5->rx_pending = 4;
drivers/bluetooth/hci_h5.c
519
h5->rx_skb = bt_skb_alloc(H5_MAX_LEN, GFP_ATOMIC);
drivers/bluetooth/hci_h5.c
520
if (!h5->rx_skb) {
drivers/bluetooth/hci_h5.c
522
h5_reset_rx(h5);
drivers/bluetooth/hci_h5.c
526
h5->rx_skb->dev = (void *)hu->hdev;
drivers/bluetooth/hci_h5.c
533
struct h5 *h5 = hu->priv;
drivers/bluetooth/hci_h5.c
536
h5->rx_func = h5_rx_pkt_start;
drivers/bluetooth/hci_h5.c
541
static void h5_unslip_one_byte(struct h5 *h5, unsigned char c)
drivers/bluetooth/hci_h5.c
546
if (!test_bit(H5_RX_ESC, &h5->flags) && c == SLIP_ESC) {
drivers/bluetooth/hci_h5.c
547
set_bit(H5_RX_ESC, &h5->flags);
drivers/bluetooth/hci_h5.c
551
if (test_and_clear_bit(H5_RX_ESC, &h5->flags)) {
drivers/bluetooth/hci_h5.c
561
h5_reset_rx(h5);
drivers/bluetooth/hci_h5.c
566
skb_put_data(h5->rx_skb, byte, 1);
drivers/bluetooth/hci_h5.c
567
h5->rx_pending--;
drivers/bluetooth/hci_h5.c
569
BT_DBG("unslipped 0x%02hhx, rx_pending %zu", *byte, h5->rx_pending);
drivers/bluetooth/hci_h5.c
572
static void h5_reset_rx(struct h5 *h5)
drivers/bluetooth/hci_h5.c
574
if (h5->rx_skb) {
drivers/bluetooth/hci_h5.c
575
kfree_skb(h5->rx_skb);
drivers/bluetooth/hci_h5.c
576
h5->rx_skb = NULL;
drivers/bluetooth/hci_h5.c
579
h5->rx_func = h5_rx_delimiter;
drivers/bluetooth/hci_h5.c
580
h5->rx_pending = 0;
drivers/bluetooth/hci_h5.c
581
clear_bit(H5_RX_ESC, &h5->flags);
drivers/bluetooth/hci_h5.c
582
clear_bit(H5_CRC, &h5->flags);
drivers/bluetooth/hci_h5.c
587
struct h5 *h5 = hu->priv;
drivers/bluetooth/hci_h5.c
590
BT_DBG("%s pending %zu count %d", hu->hdev->name, h5->rx_pending,
drivers/bluetooth/hci_h5.c
596
if (h5->rx_pending > 0) {
drivers/bluetooth/hci_h5.c
599
h5_reset_rx(h5);
drivers/bluetooth/hci_h5.c
603
h5_unslip_one_byte(h5, *ptr);
drivers/bluetooth/hci_h5.c
609
processed = h5->rx_func(hu, *ptr);
drivers/bluetooth/hci_h5.c
627
struct h5 *h5 = hu->priv;
drivers/bluetooth/hci_h5.c
635
if (h5->state != H5_ACTIVE) {
drivers/bluetooth/hci_h5.c
644
skb_queue_tail(&h5->rel, skb);
drivers/bluetooth/hci_h5.c
649
skb_queue_tail(&h5->unrel, skb);
drivers/bluetooth/hci_h5.c
708
struct h5 *h5 = hu->priv;
drivers/bluetooth/hci_h5.c
733
hdr[0] = h5->tx_ack << 3;
drivers/bluetooth/hci_h5.c
734
clear_bit(H5_TX_ACK_REQ, &h5->flags);
drivers/bluetooth/hci_h5.c
739
hdr[0] |= (test_bit(H5_CRC, &h5->flags) && 1) << 6;
drivers/bluetooth/hci_h5.c
740
hdr[0] |= h5->tx_seq;
drivers/bluetooth/hci_h5.c
741
h5->tx_seq = (h5->tx_seq + 1) % 8;
drivers/bluetooth/hci_h5.c
775
struct h5 *h5 = hu->priv;
drivers/bluetooth/hci_h5.c
779
if (h5->sleep != H5_AWAKE) {
drivers/bluetooth/hci_h5.c
782
if (h5->sleep == H5_WAKING_UP)
drivers/bluetooth/hci_h5.c
785
h5->sleep = H5_WAKING_UP;
drivers/bluetooth/hci_h5.c
788
mod_timer(&h5->timer, jiffies + HZ / 100);
drivers/bluetooth/hci_h5.c
792
skb = skb_dequeue(&h5->unrel);
drivers/bluetooth/hci_h5.c
801
skb_queue_head(&h5->unrel, skb);
drivers/bluetooth/hci_h5.c
805
spin_lock_irqsave_nested(&h5->unack.lock, flags, SINGLE_DEPTH_NESTING);
drivers/bluetooth/hci_h5.c
807
if (h5->unack.qlen >= h5->tx_win)
drivers/bluetooth/hci_h5.c
810
skb = skb_dequeue(&h5->rel);
drivers/bluetooth/hci_h5.c
815
__skb_queue_tail(&h5->unack, skb);
drivers/bluetooth/hci_h5.c
816
mod_timer(&h5->timer, jiffies + H5_ACK_TIMEOUT);
drivers/bluetooth/hci_h5.c
817
spin_unlock_irqrestore(&h5->unack.lock, flags);
drivers/bluetooth/hci_h5.c
821
skb_queue_head(&h5->rel, skb);
drivers/bluetooth/hci_h5.c
826
spin_unlock_irqrestore(&h5->unack.lock, flags);
drivers/bluetooth/hci_h5.c
828
if (test_bit(H5_TX_ACK_REQ, &h5->flags))
drivers/bluetooth/hci_h5.c
855
struct h5 *h5;
drivers/bluetooth/hci_h5.c
858
h5 = devm_kzalloc(dev, sizeof(*h5), GFP_KERNEL);
drivers/bluetooth/hci_h5.c
859
if (!h5)
drivers/bluetooth/hci_h5.c
862
h5->hu = &h5->serdev_hu;
drivers/bluetooth/hci_h5.c
863
h5->serdev_hu.serdev = serdev;
drivers/bluetooth/hci_h5.c
864
serdev_device_set_drvdata(serdev, h5);
drivers/bluetooth/hci_h5.c
874
h5->vnd = data->vnd;
drivers/bluetooth/hci_h5.c
875
h5->id = (char *)match->id;
drivers/bluetooth/hci_h5.c
877
if (h5->vnd->acpi_gpio_map)
drivers/bluetooth/hci_h5.c
879
h5->vnd->acpi_gpio_map);
drivers/bluetooth/hci_h5.c
885
h5->vnd = data->vnd;
drivers/bluetooth/hci_h5.c
889
set_bit(H5_WAKEUP_DISABLE, &h5->flags);
drivers/bluetooth/hci_h5.c
891
h5->enable_gpio = devm_gpiod_get_optional(dev, "enable", GPIOD_OUT_LOW);
drivers/bluetooth/hci_h5.c
892
if (IS_ERR(h5->enable_gpio))
drivers/bluetooth/hci_h5.c
893
return PTR_ERR(h5->enable_gpio);
drivers/bluetooth/hci_h5.c
895
h5->device_wake_gpio = devm_gpiod_get_optional(dev, "device-wake",
drivers/bluetooth/hci_h5.c
897
if (IS_ERR(h5->device_wake_gpio))
drivers/bluetooth/hci_h5.c
898
return PTR_ERR(h5->device_wake_gpio);
drivers/bluetooth/hci_h5.c
900
return hci_uart_register_device_priv(&h5->serdev_hu, &h5p,
drivers/bluetooth/hci_h5.c
901
h5->vnd->sizeof_priv);
drivers/bluetooth/hci_h5.c
906
struct h5 *h5 = serdev_device_get_drvdata(serdev);
drivers/bluetooth/hci_h5.c
908
hci_uart_unregister_device(&h5->serdev_hu);
drivers/bluetooth/hci_h5.c
913
struct h5 *h5 = dev_get_drvdata(dev);
drivers/bluetooth/hci_h5.c
916
if (h5->vnd && h5->vnd->suspend)
drivers/bluetooth/hci_h5.c
917
ret = h5->vnd->suspend(h5);
drivers/bluetooth/hci_h5.c
924
struct h5 *h5 = dev_get_drvdata(dev);
drivers/bluetooth/hci_h5.c
927
if (h5->vnd && h5->vnd->resume)
drivers/bluetooth/hci_h5.c
928
ret = h5->vnd->resume(h5);
drivers/bluetooth/hci_h5.c
934
static int h5_btrtl_setup(struct h5 *h5)
drivers/bluetooth/hci_h5.c
944
btrtl_dev = btrtl_initialize(h5->hu->hdev, h5->id);
drivers/bluetooth/hci_h5.c
948
err = btrtl_get_uart_settings(h5->hu->hdev, btrtl_dev,
drivers/bluetooth/hci_h5.c
955
skb = __hci_cmd_sync(h5->hu->hdev, 0xfc17, sizeof(baudrate_data),
drivers/bluetooth/hci_h5.c
958
rtl_dev_err(h5->hu->hdev, "set baud rate command failed\n");
drivers/bluetooth/hci_h5.c
967
serdev_device_set_baudrate(h5->hu->serdev, controller_baudrate);
drivers/bluetooth/hci_h5.c
968
serdev_device_set_flow_control(h5->hu->serdev, flow_control);
drivers/bluetooth/hci_h5.c
971
set_bit(H5_HW_FLOW_CONTROL, &h5->flags);
drivers/bluetooth/hci_h5.c
973
err = btrtl_download_firmware(h5->hu->hdev, btrtl_dev);
drivers/bluetooth/hci_h5.c
979
btrtl_set_quirks(h5->hu->hdev, btrtl_dev);
drivers/bluetooth/hci_h5.c
987
static void h5_btrtl_open(struct h5 *h5)
drivers/bluetooth/hci_h5.c
994
if (test_bit(H5_WAKEUP_DISABLE, &h5->flags))
drivers/bluetooth/hci_h5.c
995
set_bit(HCI_UART_NO_SUSPEND_NOTIFIER, &h5->hu->flags);
drivers/bluetooth/hci_h5.c
998
serdev_device_set_flow_control(h5->hu->serdev, false);
drivers/bluetooth/hci_h5.c
999
serdev_device_set_parity(h5->hu->serdev, SERDEV_PARITY_EVEN);