aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-hdw.c82
1 files changed, 54 insertions, 28 deletions
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
index 7172f66a6a28..c8ee379159e2 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
@@ -1143,6 +1143,13 @@ static int pvr2_upload_firmware1(struct pvr2_hdw *hdw)
1143 fw_files_24xxx, ARRAY_SIZE(fw_files_24xxx) 1143 fw_files_24xxx, ARRAY_SIZE(fw_files_24xxx)
1144 }, 1144 },
1145 }; 1145 };
1146
1147 if ((hdw->hdw_type >= ARRAY_SIZE(fw_file_defs)) ||
1148 (!fw_file_defs[hdw->hdw_type].lst)) {
1149 hdw->fw1_state = FW1_STATE_OK;
1150 return 0;
1151 }
1152
1146 hdw->fw1_state = FW1_STATE_FAILED; // default result 1153 hdw->fw1_state = FW1_STATE_FAILED; // default result
1147 1154
1148 trace_firmware("pvr2_upload_firmware1"); 1155 trace_firmware("pvr2_upload_firmware1");
@@ -1224,6 +1231,11 @@ int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
1224 CX2341X_FIRM_ENC_FILENAME, 1231 CX2341X_FIRM_ENC_FILENAME,
1225 }; 1232 };
1226 1233
1234 if ((hdw->hdw_type != PVR2_HDW_TYPE_29XXX) &&
1235 (hdw->hdw_type != PVR2_HDW_TYPE_24XXX)) {
1236 return 0;
1237 }
1238
1227 trace_firmware("pvr2_upload_firmware2"); 1239 trace_firmware("pvr2_upload_firmware2");
1228 1240
1229 ret = pvr2_locate_firmware(hdw,&fw_entry,"encoder", 1241 ret = pvr2_locate_firmware(hdw,&fw_entry,"encoder",
@@ -1742,29 +1754,35 @@ static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
1742 unsigned int idx; 1754 unsigned int idx;
1743 struct pvr2_ctrl *cptr; 1755 struct pvr2_ctrl *cptr;
1744 int reloadFl = 0; 1756 int reloadFl = 0;
1745 if (!reloadFl) { 1757 if ((hdw->hdw_type == PVR2_HDW_TYPE_29XXX) ||
1746 reloadFl = (hdw->usb_intf->cur_altsetting->desc.bNumEndpoints 1758 (hdw->hdw_type == PVR2_HDW_TYPE_24XXX)) {
1747 == 0); 1759 if (!reloadFl) {
1748 if (reloadFl) { 1760 reloadFl =
1749 pvr2_trace(PVR2_TRACE_INIT, 1761 (hdw->usb_intf->cur_altsetting->desc.bNumEndpoints
1750 "USB endpoint config looks strange" 1762 == 0);
1751 "; possibly firmware needs to be loaded"); 1763 if (reloadFl) {
1764 pvr2_trace(PVR2_TRACE_INIT,
1765 "USB endpoint config looks strange"
1766 "; possibly firmware needs to be"
1767 " loaded");
1768 }
1752 } 1769 }
1753 } 1770 if (!reloadFl) {
1754 if (!reloadFl) { 1771 reloadFl = !pvr2_hdw_check_firmware(hdw);
1755 reloadFl = !pvr2_hdw_check_firmware(hdw); 1772 if (reloadFl) {
1756 if (reloadFl) { 1773 pvr2_trace(PVR2_TRACE_INIT,
1757 pvr2_trace(PVR2_TRACE_INIT, 1774 "Check for FX2 firmware failed"
1758 "Check for FX2 firmware failed" 1775 "; possibly firmware needs to be"
1759 "; possibly firmware needs to be loaded"); 1776 " loaded");
1777 }
1760 } 1778 }
1761 } 1779 if (reloadFl) {
1762 if (reloadFl) { 1780 if (pvr2_upload_firmware1(hdw) != 0) {
1763 if (pvr2_upload_firmware1(hdw) != 0) { 1781 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1764 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 1782 "Failure uploading firmware1");
1765 "Failure uploading firmware1"); 1783 }
1784 return;
1766 } 1785 }
1767 return;
1768 } 1786 }
1769 hdw->fw1_state = FW1_STATE_OK; 1787 hdw->fw1_state = FW1_STATE_OK;
1770 1788
@@ -1773,17 +1791,25 @@ static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
1773 } 1791 }
1774 if (!pvr2_hdw_dev_ok(hdw)) return; 1792 if (!pvr2_hdw_dev_ok(hdw)) return;
1775 1793
1776 for (idx = 0; idx < pvr2_client_lists[hdw->hdw_type].cnt; idx++) { 1794 if (hdw->hdw_type < ARRAY_SIZE(pvr2_client_lists)) {
1777 request_module(pvr2_client_lists[hdw->hdw_type].lst[idx]); 1795 for (idx = 0;
1796 idx < pvr2_client_lists[hdw->hdw_type].cnt;
1797 idx++) {
1798 request_module(
1799 pvr2_client_lists[hdw->hdw_type].lst[idx]);
1800 }
1778 } 1801 }
1779 1802
1780 pvr2_hdw_cmd_powerup(hdw); 1803 if ((hdw->hdw_type == PVR2_HDW_TYPE_29XXX) ||
1781 if (!pvr2_hdw_dev_ok(hdw)) return; 1804 (hdw->hdw_type == PVR2_HDW_TYPE_24XXX)) {
1805 pvr2_hdw_cmd_powerup(hdw);
1806 if (!pvr2_hdw_dev_ok(hdw)) return;
1782 1807
1783 if (pvr2_upload_firmware2(hdw)){ 1808 if (pvr2_upload_firmware2(hdw)){
1784 pvr2_trace(PVR2_TRACE_ERROR_LEGS,"device unstable!!"); 1809 pvr2_trace(PVR2_TRACE_ERROR_LEGS,"device unstable!!");
1785 pvr2_hdw_render_useless(hdw); 1810 pvr2_hdw_render_useless(hdw);
1786 return; 1811 return;
1812 }
1787 } 1813 }
1788 1814
1789 // This step MUST happen after the earlier powerup step. 1815 // This step MUST happen after the earlier powerup step.