struct sco_param {
        u16 pkt_type;
        u16 max_latency;
+       u8  retrans_effort;
 };
 
 static const struct sco_param esco_param_cvsd[] = {
-       { EDR_ESCO_MASK & ~ESCO_2EV3, 0x000a }, /* S3 */
-       { EDR_ESCO_MASK & ~ESCO_2EV3, 0x0007 }, /* S2 */
-       { EDR_ESCO_MASK | ESCO_EV3,   0x0007 }, /* S1 */
-       { EDR_ESCO_MASK | ESCO_HV3,   0xffff }, /* D1 */
-       { EDR_ESCO_MASK | ESCO_HV1,   0xffff }, /* D0 */
+       { EDR_ESCO_MASK & ~ESCO_2EV3, 0x000a,   0x01 }, /* S3 */
+       { EDR_ESCO_MASK & ~ESCO_2EV3, 0x0007,   0x01 }, /* S2 */
+       { EDR_ESCO_MASK | ESCO_EV3,   0x0007,   0x01 }, /* S1 */
+       { EDR_ESCO_MASK | ESCO_HV3,   0xffff,   0x01 }, /* D1 */
+       { EDR_ESCO_MASK | ESCO_HV1,   0xffff,   0x01 }, /* D0 */
 };
 
 static const struct sco_param sco_param_cvsd[] = {
-       { EDR_ESCO_MASK | ESCO_HV3,   0xffff }, /* D1 */
-       { EDR_ESCO_MASK | ESCO_HV1,   0xffff }, /* D0 */
+       { EDR_ESCO_MASK | ESCO_HV3,   0xffff,   0xff }, /* D1 */
+       { EDR_ESCO_MASK | ESCO_HV1,   0xffff,   0xff }, /* D0 */
 };
 
 static const struct sco_param sco_param_wideband[] = {
-       { EDR_ESCO_MASK & ~ESCO_2EV3, 0x000d }, /* T2 */
-       { EDR_ESCO_MASK | ESCO_EV3,   0x0008 }, /* T1 */
+       { EDR_ESCO_MASK & ~ESCO_2EV3, 0x000d,   0x02 }, /* T2 */
+       { EDR_ESCO_MASK | ESCO_EV3,   0x0008,   0x02 }, /* T1 */
 };
 
 static void hci_le_create_connection_cancel(struct hci_conn *conn)
        case SCO_AIRMODE_TRANSP:
                if (conn->attempt > ARRAY_SIZE(sco_param_wideband))
                        return false;
-               cp.retrans_effort = 0x02;
                param = &sco_param_wideband[conn->attempt - 1];
                break;
        case SCO_AIRMODE_CVSD:
                if (lmp_esco_capable(conn->link)) {
                        if (conn->attempt > ARRAY_SIZE(esco_param_cvsd))
                                return false;
-                       cp.retrans_effort = 0x01;
                        param = &esco_param_cvsd[conn->attempt - 1];
                } else {
                        if (conn->attempt > ARRAY_SIZE(sco_param_cvsd))
                                return false;
-                       cp.retrans_effort = 0xff;
                        param = &sco_param_cvsd[conn->attempt - 1];
                }
                break;
                return false;
        }
 
+       cp.retrans_effort = param->retrans_effort;
        cp.pkt_type = __cpu_to_le16(param->pkt_type);
        cp.max_latency = __cpu_to_le16(param->max_latency);