in s3fwrn5/uart.c [111:172]
static int s3fwrn82_uart_probe(struct serdev_device *serdev)
{
struct s3fwrn82_uart_phy *phy;
int ret = -ENOMEM;
phy = devm_kzalloc(&serdev->dev, sizeof(*phy), GFP_KERNEL);
if (!phy)
goto err_exit;
phy->recv_skb = alloc_skb(NCI_SKB_BUFF_LEN, GFP_KERNEL);
if (!phy->recv_skb)
goto err_exit;
mutex_init(&phy->common.mutex);
phy->common.mode = S3FWRN5_MODE_COLD;
phy->ser_dev = serdev;
serdev_device_set_drvdata(serdev, phy);
serdev_device_set_client_ops(serdev, &s3fwrn82_serdev_ops);
ret = serdev_device_open(serdev);
if (ret) {
dev_err(&serdev->dev, "Unable to open device\n");
goto err_skb;
}
ret = serdev_device_set_baudrate(serdev, 115200);
if (ret != 115200) {
ret = -EINVAL;
goto err_serdev;
}
serdev_device_set_flow_control(serdev, false);
ret = s3fwrn82_uart_parse_dt(serdev);
if (ret < 0)
goto err_serdev;
ret = devm_gpio_request_one(&phy->ser_dev->dev, phy->common.gpio_en,
GPIOF_OUT_INIT_HIGH, "s3fwrn82_en");
if (ret < 0)
goto err_serdev;
ret = devm_gpio_request_one(&phy->ser_dev->dev,
phy->common.gpio_fw_wake,
GPIOF_OUT_INIT_LOW, "s3fwrn82_fw_wake");
if (ret < 0)
goto err_serdev;
ret = s3fwrn5_probe(&phy->common.ndev, phy, &phy->ser_dev->dev,
&uart_phy_ops);
if (ret < 0)
goto err_serdev;
return ret;
err_serdev:
serdev_device_close(serdev);
err_skb:
kfree_skb(phy->recv_skb);
err_exit:
return ret;
}