mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
Merge 4964dbc419 ("drm/amd/display: Fix slab-use-after-free on hdcp_work") into android14-6.1-lts
Steps on the way to 6.1.132 Change-Id: Ib1da8d5bb95a224059c16e97e7f83f09b9468388 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -867,7 +867,7 @@ static enum ucode_state load_microcode_amd(u8 family, const u8 *data, size_t siz
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
for_each_node(nid) {
|
for_each_node_with_cpus(nid) {
|
||||||
cpu = cpumask_first(cpumask_of_node(nid));
|
cpu = cpumask_first(cpumask_of_node(nid));
|
||||||
c = &cpu_data(cpu);
|
c = &cpu_data(cpu);
|
||||||
|
|
||||||
|
|||||||
@@ -230,6 +230,10 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
|
|||||||
static void handle_hpd_irq_helper(struct amdgpu_dm_connector *aconnector);
|
static void handle_hpd_irq_helper(struct amdgpu_dm_connector *aconnector);
|
||||||
static void handle_hpd_rx_irq(void *param);
|
static void handle_hpd_rx_irq(void *param);
|
||||||
|
|
||||||
|
static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm,
|
||||||
|
int bl_idx,
|
||||||
|
u32 user_brightness);
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
is_timing_unchanged_for_freesync(struct drm_crtc_state *old_crtc_state,
|
is_timing_unchanged_for_freesync(struct drm_crtc_state *old_crtc_state,
|
||||||
struct drm_crtc_state *new_crtc_state);
|
struct drm_crtc_state *new_crtc_state);
|
||||||
@@ -2885,6 +2889,12 @@ static int dm_resume(void *handle)
|
|||||||
|
|
||||||
mutex_unlock(&dm->dc_lock);
|
mutex_unlock(&dm->dc_lock);
|
||||||
|
|
||||||
|
/* set the backlight after a reset */
|
||||||
|
for (i = 0; i < dm->num_of_edps; i++) {
|
||||||
|
if (dm->backlight_dev[i])
|
||||||
|
amdgpu_dm_backlight_set_level(dm, i, dm->brightness[i]);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* Recreate dc_state - DC invalidates it when setting power state to S3. */
|
/* Recreate dc_state - DC invalidates it when setting power state to S3. */
|
||||||
|
|||||||
@@ -404,6 +404,7 @@ void hdcp_destroy(struct kobject *kobj, struct hdcp_workqueue *hdcp_work)
|
|||||||
for (i = 0; i < hdcp_work->max_link; i++) {
|
for (i = 0; i < hdcp_work->max_link; i++) {
|
||||||
cancel_delayed_work_sync(&hdcp_work[i].callback_dwork);
|
cancel_delayed_work_sync(&hdcp_work[i].callback_dwork);
|
||||||
cancel_delayed_work_sync(&hdcp_work[i].watchdog_timer_dwork);
|
cancel_delayed_work_sync(&hdcp_work[i].watchdog_timer_dwork);
|
||||||
|
cancel_delayed_work_sync(&hdcp_work[i].property_validate_dwork);
|
||||||
}
|
}
|
||||||
|
|
||||||
sysfs_remove_bin_file(kobj, &hdcp_work[0].attr);
|
sysfs_remove_bin_file(kobj, &hdcp_work[0].attr);
|
||||||
|
|||||||
@@ -2328,10 +2328,13 @@ static int get_norm_pix_clk(const struct dc_crtc_timing *timing)
|
|||||||
break;
|
break;
|
||||||
case COLOR_DEPTH_121212:
|
case COLOR_DEPTH_121212:
|
||||||
normalized_pix_clk = (pix_clk * 36) / 24;
|
normalized_pix_clk = (pix_clk * 36) / 24;
|
||||||
break;
|
break;
|
||||||
|
case COLOR_DEPTH_141414:
|
||||||
|
normalized_pix_clk = (pix_clk * 42) / 24;
|
||||||
|
break;
|
||||||
case COLOR_DEPTH_161616:
|
case COLOR_DEPTH_161616:
|
||||||
normalized_pix_clk = (pix_clk * 48) / 24;
|
normalized_pix_clk = (pix_clk * 48) / 24;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -3959,6 +3959,22 @@ out:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool primary_mstb_probing_is_done(struct drm_dp_mst_topology_mgr *mgr)
|
||||||
|
{
|
||||||
|
bool probing_done = false;
|
||||||
|
|
||||||
|
mutex_lock(&mgr->lock);
|
||||||
|
|
||||||
|
if (mgr->mst_primary && drm_dp_mst_topology_try_get_mstb(mgr->mst_primary)) {
|
||||||
|
probing_done = mgr->mst_primary->link_address_sent;
|
||||||
|
drm_dp_mst_topology_put_mstb(mgr->mst_primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
mutex_unlock(&mgr->lock);
|
||||||
|
|
||||||
|
return probing_done;
|
||||||
|
}
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
drm_dp_mst_process_up_req(struct drm_dp_mst_topology_mgr *mgr,
|
drm_dp_mst_process_up_req(struct drm_dp_mst_topology_mgr *mgr,
|
||||||
struct drm_dp_pending_up_req *up_req)
|
struct drm_dp_pending_up_req *up_req)
|
||||||
@@ -3989,8 +4005,12 @@ drm_dp_mst_process_up_req(struct drm_dp_mst_topology_mgr *mgr,
|
|||||||
|
|
||||||
/* TODO: Add missing handler for DP_RESOURCE_STATUS_NOTIFY events */
|
/* TODO: Add missing handler for DP_RESOURCE_STATUS_NOTIFY events */
|
||||||
if (msg->req_type == DP_CONNECTION_STATUS_NOTIFY) {
|
if (msg->req_type == DP_CONNECTION_STATUS_NOTIFY) {
|
||||||
dowork = drm_dp_mst_handle_conn_stat(mstb, &msg->u.conn_stat);
|
if (!primary_mstb_probing_is_done(mgr)) {
|
||||||
hotplug = true;
|
drm_dbg_kms(mgr->dev, "Got CSN before finish topology probing. Skip it.\n");
|
||||||
|
} else {
|
||||||
|
dowork = drm_dp_mst_handle_conn_stat(mstb, &msg->u.conn_stat);
|
||||||
|
hotplug = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
drm_dp_mst_topology_put_mstb(mstb);
|
drm_dp_mst_topology_put_mstb(mstb);
|
||||||
@@ -4069,10 +4089,11 @@ static int drm_dp_mst_handle_up_req(struct drm_dp_mst_topology_mgr *mgr)
|
|||||||
drm_dp_send_up_ack_reply(mgr, mst_primary, up_req->msg.req_type,
|
drm_dp_send_up_ack_reply(mgr, mst_primary, up_req->msg.req_type,
|
||||||
false);
|
false);
|
||||||
|
|
||||||
|
drm_dp_mst_topology_put_mstb(mst_primary);
|
||||||
|
|
||||||
if (up_req->msg.req_type == DP_CONNECTION_STATUS_NOTIFY) {
|
if (up_req->msg.req_type == DP_CONNECTION_STATUS_NOTIFY) {
|
||||||
const struct drm_dp_connection_status_notify *conn_stat =
|
const struct drm_dp_connection_status_notify *conn_stat =
|
||||||
&up_req->msg.u.conn_stat;
|
&up_req->msg.u.conn_stat;
|
||||||
bool handle_csn;
|
|
||||||
|
|
||||||
drm_dbg_kms(mgr->dev, "Got CSN: pn: %d ldps:%d ddps: %d mcs: %d ip: %d pdt: %d\n",
|
drm_dbg_kms(mgr->dev, "Got CSN: pn: %d ldps:%d ddps: %d mcs: %d ip: %d pdt: %d\n",
|
||||||
conn_stat->port_number,
|
conn_stat->port_number,
|
||||||
@@ -4081,16 +4102,6 @@ static int drm_dp_mst_handle_up_req(struct drm_dp_mst_topology_mgr *mgr)
|
|||||||
conn_stat->message_capability_status,
|
conn_stat->message_capability_status,
|
||||||
conn_stat->input_port,
|
conn_stat->input_port,
|
||||||
conn_stat->peer_device_type);
|
conn_stat->peer_device_type);
|
||||||
|
|
||||||
mutex_lock(&mgr->probe_lock);
|
|
||||||
handle_csn = mst_primary->link_address_sent;
|
|
||||||
mutex_unlock(&mgr->probe_lock);
|
|
||||||
|
|
||||||
if (!handle_csn) {
|
|
||||||
drm_dbg_kms(mgr->dev, "Got CSN before finish topology probing. Skip it.");
|
|
||||||
kfree(up_req);
|
|
||||||
goto out_put_primary;
|
|
||||||
}
|
|
||||||
} else if (up_req->msg.req_type == DP_RESOURCE_STATUS_NOTIFY) {
|
} else if (up_req->msg.req_type == DP_RESOURCE_STATUS_NOTIFY) {
|
||||||
const struct drm_dp_resource_status_notify *res_stat =
|
const struct drm_dp_resource_status_notify *res_stat =
|
||||||
&up_req->msg.u.resource_stat;
|
&up_req->msg.u.resource_stat;
|
||||||
@@ -4105,9 +4116,6 @@ static int drm_dp_mst_handle_up_req(struct drm_dp_mst_topology_mgr *mgr)
|
|||||||
list_add_tail(&up_req->next, &mgr->up_req_list);
|
list_add_tail(&up_req->next, &mgr->up_req_list);
|
||||||
mutex_unlock(&mgr->up_req_lock);
|
mutex_unlock(&mgr->up_req_lock);
|
||||||
queue_work(system_long_wq, &mgr->up_req_work);
|
queue_work(system_long_wq, &mgr->up_req_work);
|
||||||
|
|
||||||
out_put_primary:
|
|
||||||
drm_dp_mst_topology_put_mstb(mst_primary);
|
|
||||||
out_clear_reply:
|
out_clear_reply:
|
||||||
memset(&mgr->up_req_recv, 0, sizeof(struct drm_dp_sideband_msg_rx));
|
memset(&mgr->up_req_recv, 0, sizeof(struct drm_dp_sideband_msg_rx));
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -932,6 +932,10 @@ int drm_atomic_connector_commit_dpms(struct drm_atomic_state *state,
|
|||||||
|
|
||||||
if (mode != DRM_MODE_DPMS_ON)
|
if (mode != DRM_MODE_DPMS_ON)
|
||||||
mode = DRM_MODE_DPMS_OFF;
|
mode = DRM_MODE_DPMS_OFF;
|
||||||
|
|
||||||
|
if (connector->dpms == mode)
|
||||||
|
goto out;
|
||||||
|
|
||||||
connector->dpms = mode;
|
connector->dpms = mode;
|
||||||
|
|
||||||
crtc = connector->state->crtc;
|
crtc = connector->state->crtc;
|
||||||
|
|||||||
@@ -1100,6 +1100,10 @@ static const struct drm_prop_enum_list dp_colorspaces[] = {
|
|||||||
* callback. For atomic drivers the remapping to the "ACTIVE" property is
|
* callback. For atomic drivers the remapping to the "ACTIVE" property is
|
||||||
* implemented in the DRM core.
|
* implemented in the DRM core.
|
||||||
*
|
*
|
||||||
|
* On atomic drivers any DPMS setproperty ioctl where the value does not
|
||||||
|
* change is completely skipped, otherwise a full atomic commit will occur.
|
||||||
|
* On legacy drivers the exact behavior is driver specific.
|
||||||
|
*
|
||||||
* Note that this property cannot be set through the MODE_ATOMIC ioctl,
|
* Note that this property cannot be set through the MODE_ATOMIC ioctl,
|
||||||
* userspace must use "ACTIVE" on the CRTC instead.
|
* userspace must use "ACTIVE" on the CRTC instead.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1079,6 +1079,20 @@ static const struct usb_device_id id_table_combined[] = {
|
|||||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||||
/* GMC devices */
|
/* GMC devices */
|
||||||
{ USB_DEVICE(GMC_VID, GMC_Z216C_PID) },
|
{ USB_DEVICE(GMC_VID, GMC_Z216C_PID) },
|
||||||
|
/* Altera USB Blaster 3 */
|
||||||
|
{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6022_PID, 1) },
|
||||||
|
{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6025_PID, 2) },
|
||||||
|
{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6026_PID, 2) },
|
||||||
|
{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6026_PID, 3) },
|
||||||
|
{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_6029_PID, 2) },
|
||||||
|
{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602A_PID, 2) },
|
||||||
|
{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602A_PID, 3) },
|
||||||
|
{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602C_PID, 1) },
|
||||||
|
{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602D_PID, 1) },
|
||||||
|
{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602D_PID, 2) },
|
||||||
|
{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602E_PID, 1) },
|
||||||
|
{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602E_PID, 2) },
|
||||||
|
{ USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602E_PID, 3) },
|
||||||
{ } /* Terminating entry */
|
{ } /* Terminating entry */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1612,3 +1612,16 @@
|
|||||||
*/
|
*/
|
||||||
#define GMC_VID 0x1cd7
|
#define GMC_VID 0x1cd7
|
||||||
#define GMC_Z216C_PID 0x0217 /* GMC Z216C Adapter IR-USB */
|
#define GMC_Z216C_PID 0x0217 /* GMC Z216C Adapter IR-USB */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Altera USB Blaster 3 (http://www.altera.com).
|
||||||
|
*/
|
||||||
|
#define ALTERA_VID 0x09fb
|
||||||
|
#define ALTERA_UB3_6022_PID 0x6022
|
||||||
|
#define ALTERA_UB3_6025_PID 0x6025
|
||||||
|
#define ALTERA_UB3_6026_PID 0x6026
|
||||||
|
#define ALTERA_UB3_6029_PID 0x6029
|
||||||
|
#define ALTERA_UB3_602A_PID 0x602a
|
||||||
|
#define ALTERA_UB3_602C_PID 0x602c
|
||||||
|
#define ALTERA_UB3_602D_PID 0x602d
|
||||||
|
#define ALTERA_UB3_602E_PID 0x602e
|
||||||
|
|||||||
@@ -1368,13 +1368,13 @@ static const struct usb_device_id option_ids[] = {
|
|||||||
.driver_info = NCTRL(0) | RSVD(1) },
|
.driver_info = NCTRL(0) | RSVD(1) },
|
||||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1075, 0xff), /* Telit FN990A (PCIe) */
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1075, 0xff), /* Telit FN990A (PCIe) */
|
||||||
.driver_info = RSVD(0) },
|
.driver_info = RSVD(0) },
|
||||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1080, 0xff), /* Telit FE990 (rmnet) */
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1080, 0xff), /* Telit FE990A (rmnet) */
|
||||||
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
|
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
|
||||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1081, 0xff), /* Telit FE990 (MBIM) */
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1081, 0xff), /* Telit FE990A (MBIM) */
|
||||||
.driver_info = NCTRL(0) | RSVD(1) },
|
.driver_info = NCTRL(0) | RSVD(1) },
|
||||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1082, 0xff), /* Telit FE990 (RNDIS) */
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1082, 0xff), /* Telit FE990A (RNDIS) */
|
||||||
.driver_info = NCTRL(2) | RSVD(3) },
|
.driver_info = NCTRL(2) | RSVD(3) },
|
||||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1083, 0xff), /* Telit FE990 (ECM) */
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1083, 0xff), /* Telit FE990A (ECM) */
|
||||||
.driver_info = NCTRL(0) | RSVD(1) },
|
.driver_info = NCTRL(0) | RSVD(1) },
|
||||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a0, 0xff), /* Telit FN20C04 (rmnet) */
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a0, 0xff), /* Telit FN20C04 (rmnet) */
|
||||||
.driver_info = RSVD(0) | NCTRL(3) },
|
.driver_info = RSVD(0) | NCTRL(3) },
|
||||||
@@ -1388,28 +1388,44 @@ static const struct usb_device_id option_ids[] = {
|
|||||||
.driver_info = RSVD(0) | NCTRL(2) | RSVD(3) | RSVD(4) },
|
.driver_info = RSVD(0) | NCTRL(2) | RSVD(3) | RSVD(4) },
|
||||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10aa, 0xff), /* Telit FN920C04 (MBIM) */
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10aa, 0xff), /* Telit FN920C04 (MBIM) */
|
||||||
.driver_info = NCTRL(3) | RSVD(4) | RSVD(5) },
|
.driver_info = NCTRL(3) | RSVD(4) | RSVD(5) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b0, 0xff, 0xff, 0x30), /* Telit FE990B (rmnet) */
|
||||||
|
.driver_info = NCTRL(5) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b0, 0xff, 0xff, 0x40) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b0, 0xff, 0xff, 0x60) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b1, 0xff, 0xff, 0x30), /* Telit FE990B (MBIM) */
|
||||||
|
.driver_info = NCTRL(6) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b1, 0xff, 0xff, 0x40) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b1, 0xff, 0xff, 0x60) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b2, 0xff, 0xff, 0x30), /* Telit FE990B (RNDIS) */
|
||||||
|
.driver_info = NCTRL(6) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b2, 0xff, 0xff, 0x40) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b2, 0xff, 0xff, 0x60) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b3, 0xff, 0xff, 0x30), /* Telit FE990B (ECM) */
|
||||||
|
.driver_info = NCTRL(6) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b3, 0xff, 0xff, 0x40) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b3, 0xff, 0xff, 0x60) },
|
||||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c0, 0xff), /* Telit FE910C04 (rmnet) */
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c0, 0xff), /* Telit FE910C04 (rmnet) */
|
||||||
.driver_info = RSVD(0) | NCTRL(3) },
|
.driver_info = RSVD(0) | NCTRL(3) },
|
||||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c4, 0xff), /* Telit FE910C04 (rmnet) */
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c4, 0xff), /* Telit FE910C04 (rmnet) */
|
||||||
.driver_info = RSVD(0) | NCTRL(3) },
|
.driver_info = RSVD(0) | NCTRL(3) },
|
||||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c8, 0xff), /* Telit FE910C04 (rmnet) */
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c8, 0xff), /* Telit FE910C04 (rmnet) */
|
||||||
.driver_info = RSVD(0) | NCTRL(2) | RSVD(3) | RSVD(4) },
|
.driver_info = RSVD(0) | NCTRL(2) | RSVD(3) | RSVD(4) },
|
||||||
{ USB_DEVICE_INTERFACE_PROTOCOL(TELIT_VENDOR_ID, 0x10d0, 0x60) }, /* Telit FN990B (rmnet) */
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d0, 0xff, 0xff, 0x30), /* Telit FN990B (rmnet) */
|
||||||
{ USB_DEVICE_INTERFACE_PROTOCOL(TELIT_VENDOR_ID, 0x10d0, 0x40) },
|
|
||||||
{ USB_DEVICE_INTERFACE_PROTOCOL(TELIT_VENDOR_ID, 0x10d0, 0x30),
|
|
||||||
.driver_info = NCTRL(5) },
|
.driver_info = NCTRL(5) },
|
||||||
{ USB_DEVICE_INTERFACE_PROTOCOL(TELIT_VENDOR_ID, 0x10d1, 0x60) }, /* Telit FN990B (MBIM) */
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d0, 0xff, 0xff, 0x40) },
|
||||||
{ USB_DEVICE_INTERFACE_PROTOCOL(TELIT_VENDOR_ID, 0x10d1, 0x40) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d0, 0xff, 0xff, 0x60) },
|
||||||
{ USB_DEVICE_INTERFACE_PROTOCOL(TELIT_VENDOR_ID, 0x10d1, 0x30),
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d1, 0xff, 0xff, 0x30), /* Telit FN990B (MBIM) */
|
||||||
.driver_info = NCTRL(6) },
|
.driver_info = NCTRL(6) },
|
||||||
{ USB_DEVICE_INTERFACE_PROTOCOL(TELIT_VENDOR_ID, 0x10d2, 0x60) }, /* Telit FN990B (RNDIS) */
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d1, 0xff, 0xff, 0x40) },
|
||||||
{ USB_DEVICE_INTERFACE_PROTOCOL(TELIT_VENDOR_ID, 0x10d2, 0x40) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d1, 0xff, 0xff, 0x60) },
|
||||||
{ USB_DEVICE_INTERFACE_PROTOCOL(TELIT_VENDOR_ID, 0x10d2, 0x30),
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d2, 0xff, 0xff, 0x30), /* Telit FN990B (RNDIS) */
|
||||||
.driver_info = NCTRL(6) },
|
.driver_info = NCTRL(6) },
|
||||||
{ USB_DEVICE_INTERFACE_PROTOCOL(TELIT_VENDOR_ID, 0x10d3, 0x60) }, /* Telit FN990B (ECM) */
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d2, 0xff, 0xff, 0x40) },
|
||||||
{ USB_DEVICE_INTERFACE_PROTOCOL(TELIT_VENDOR_ID, 0x10d3, 0x40) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d2, 0xff, 0xff, 0x60) },
|
||||||
{ USB_DEVICE_INTERFACE_PROTOCOL(TELIT_VENDOR_ID, 0x10d3, 0x30),
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d3, 0xff, 0xff, 0x30), /* Telit FN990B (ECM) */
|
||||||
.driver_info = NCTRL(6) },
|
.driver_info = NCTRL(6) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d3, 0xff, 0xff, 0x40) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10d3, 0xff, 0xff, 0x60) },
|
||||||
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910),
|
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910),
|
||||||
.driver_info = NCTRL(0) | RSVD(1) | RSVD(3) },
|
.driver_info = NCTRL(0) | RSVD(1) | RSVD(3) },
|
||||||
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
|
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
|
||||||
|
|||||||
Reference in New Issue
Block a user