diff options
Diffstat (limited to 'utils/regtools/qeditor')
-rw-r--r-- | utils/regtools/qeditor/mainwindow.cpp | 2 | ||||
-rw-r--r-- | utils/regtools/qeditor/std_analysers.cpp | 146 | ||||
-rw-r--r-- | utils/regtools/qeditor/std_analysers.h | 22 |
3 files changed, 168 insertions, 2 deletions
diff --git a/utils/regtools/qeditor/mainwindow.cpp b/utils/regtools/qeditor/mainwindow.cpp index 803490fb31..1e39dd1a83 100644 --- a/utils/regtools/qeditor/mainwindow.cpp +++ b/utils/regtools/qeditor/mainwindow.cpp | |||
@@ -104,5 +104,5 @@ void MainWindow::OnLoadDesc() | |||
104 | 104 | ||
105 | void MainWindow::OnNewRegTab() | 105 | void MainWindow::OnNewRegTab() |
106 | { | 106 | { |
107 | m_tab->setCurrentWidget(new RegTab(m_backend, m_tab)); | 107 | new RegTab(m_backend, m_tab); |
108 | } | 108 | } |
diff --git a/utils/regtools/qeditor/std_analysers.cpp b/utils/regtools/qeditor/std_analysers.cpp index d8e27692ef..0cb7533459 100644 --- a/utils/regtools/qeditor/std_analysers.cpp +++ b/utils/regtools/qeditor/std_analysers.cpp | |||
@@ -636,4 +636,148 @@ void EmiAnalyser::FillTable() | |||
636 | 636 | ||
637 | } | 637 | } |
638 | 638 | ||
639 | static TmplAnalyserFactory< EmiAnalyser > g_emi_factory(true, "EMI Analyser"); \ No newline at end of file | 639 | static TmplAnalyserFactory< EmiAnalyser > g_emi_factory(true, "EMI Analyser"); |
640 | |||
641 | /** | ||
642 | * Pin analyser | ||
643 | */ | ||
644 | |||
645 | namespace pin_desc | ||
646 | { | ||
647 | #include "../../imxtools/misc/map.h" | ||
648 | } | ||
649 | |||
650 | PinAnalyser::PinAnalyser(const soc_t& soc, IoBackend *backend) | ||
651 | :Analyser(soc, backend) | ||
652 | { | ||
653 | m_group = new QGroupBox("Pin Analyser"); | ||
654 | QVBoxLayout *layout = new QVBoxLayout; | ||
655 | m_group->setLayout(layout); | ||
656 | QLabel *label = new QLabel("Package:"); | ||
657 | m_package_edit = new QLineEdit; | ||
658 | m_package_edit->setReadOnly(true); | ||
659 | m_package_edit->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); | ||
660 | QHBoxLayout *hlayout = new QHBoxLayout; | ||
661 | hlayout->addStretch(); | ||
662 | hlayout->addWidget(label); | ||
663 | hlayout->addWidget(m_package_edit); | ||
664 | hlayout->addStretch(); | ||
665 | layout->addLayout(hlayout); | ||
666 | m_panel = new QToolBox; | ||
667 | layout->addWidget(m_panel); | ||
668 | |||
669 | FillList(); | ||
670 | } | ||
671 | |||
672 | PinAnalyser::~PinAnalyser() | ||
673 | { | ||
674 | } | ||
675 | |||
676 | QWidget *PinAnalyser::GetWidget() | ||
677 | { | ||
678 | return m_group; | ||
679 | } | ||
680 | |||
681 | bool PinAnalyser::SupportSoc(const QString& soc_name) | ||
682 | { | ||
683 | return soc_name == "imx233" || soc_name == "stmp3700"; | ||
684 | } | ||
685 | |||
686 | void PinAnalyser::FillList() | ||
687 | { | ||
688 | BackendHelper helper(m_io_backend, m_soc); | ||
689 | soc_word_t value; | ||
690 | |||
691 | while(m_panel->count() > 0) | ||
692 | m_panel->removeItem(0); | ||
693 | |||
694 | const char *package_type[8] = | ||
695 | { | ||
696 | [0] = "bga169", [1] = "bga100", [2] = "lqfp100", [3] = "lqfp128", | ||
697 | }; | ||
698 | |||
699 | if(!helper.ReadRegisterField("DIGCTL", "STATUS", "PACKAGE_TYPE", value)) | ||
700 | { | ||
701 | m_package_edit->setText("<read error>"); | ||
702 | return; | ||
703 | } | ||
704 | if(value >= 8 || package_type[value] == NULL) | ||
705 | { | ||
706 | m_package_edit->setText("<unknown package>"); | ||
707 | return; | ||
708 | } | ||
709 | const char *package = package_type[value]; | ||
710 | m_package_edit->setText(package); | ||
711 | pin_desc::bank_map_t *map = NULL; | ||
712 | for(size_t i = 0; i < sizeof(pin_desc::socs) / sizeof(pin_desc::socs[0]); i++) | ||
713 | if(QString(pin_desc::socs[i].soc) == m_io_backend->GetSocName() && | ||
714 | QString(pin_desc::socs[i].ver) == package) | ||
715 | map = pin_desc::socs[i].map; | ||
716 | if(map == NULL) | ||
717 | { | ||
718 | m_package_edit->setText(QString("%1 (no map available)").arg(package)); | ||
719 | return; | ||
720 | } | ||
721 | |||
722 | QMap< unsigned, QColor > color_map; | ||
723 | color_map[PIN_GROUP_EMI] = QColor(255, 255, 64); | ||
724 | color_map[PIN_GROUP_GPIO] = QColor(171, 214, 230); | ||
725 | color_map[PIN_GROUP_I2C] = QColor(191, 191, 255); | ||
726 | color_map[PIN_GROUP_JTAG] = QColor(238, 75, 21); | ||
727 | color_map[PIN_GROUP_PWM] = QColor(255, 236, 179); | ||
728 | color_map[PIN_GROUP_SPDIF] = QColor(174, 235, 63); | ||
729 | color_map[PIN_GROUP_TIMROT] = QColor(255, 112, 237); | ||
730 | color_map[PIN_GROUP_AUART] = QColor(94, 255, 128); | ||
731 | color_map[PIN_GROUP_ETM] = QColor(168, 53, 14); | ||
732 | color_map[PIN_GROUP_GPMI] = QColor(255, 211, 147); | ||
733 | color_map[PIN_GROUP_IrDA] = QColor(64, 97, 255); | ||
734 | color_map[PIN_GROUP_LCD] = QColor(124, 255, 255); | ||
735 | color_map[PIN_GROUP_SAIF] = QColor(255, 158, 158); | ||
736 | color_map[PIN_GROUP_SSP] = QColor(222, 128, 255); | ||
737 | color_map[PIN_GROUP_DUART] = QColor(192, 191, 191); | ||
738 | color_map[PIN_GROUP_USB] = QColor(0, 255, 0); | ||
739 | color_map[PIN_GROUP_NONE] = QColor(255, 255, 255); | ||
740 | |||
741 | for(int bank = 0; bank < 4; bank++) | ||
742 | { | ||
743 | QTableWidget *table = new QTableWidget; | ||
744 | table->setColumnCount(2); | ||
745 | table->setHorizontalHeaderItem(0, new QTableWidgetItem("Pin")); | ||
746 | table->setHorizontalHeaderItem(1, new QTableWidgetItem("Function")); | ||
747 | table->verticalHeader()->setVisible(false); | ||
748 | table->horizontalHeader()->setStretchLastSection(true); | ||
749 | m_panel->addItem(table, QString("Bank %1").arg(bank)); | ||
750 | |||
751 | for(int pin = 0; pin < 32; pin++) | ||
752 | { | ||
753 | /* skip all-reserved pins */ | ||
754 | bool all_dis = true; | ||
755 | for(int fn = 0; fn < 4; fn++) | ||
756 | if(map[bank].pins[pin].function[fn].name != NULL) | ||
757 | all_dis = false; | ||
758 | if(all_dis) | ||
759 | continue; | ||
760 | /* add line */ | ||
761 | int row = table->rowCount(); | ||
762 | table->setRowCount(row + 1); | ||
763 | /* pin name */ | ||
764 | table->setItem(row, 0, new QTableWidgetItem(QString("B%1P%2") | ||
765 | .arg(bank).arg(pin, 2, 10, QChar('0')))); | ||
766 | table->item(row, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); | ||
767 | /* pin function */ | ||
768 | int fn = -1; | ||
769 | if(helper.ReadRegister("PINCTRL", QString("MUXSEL%1").arg(bank * 2 + pin / 16), value)) | ||
770 | fn = (value >> ((pin % 16) * 2)) & 3; | ||
771 | if(fn != -1) | ||
772 | { | ||
773 | table->setItem(row, 1, new QTableWidgetItem(QString(map[bank].pins[pin].function[fn].name))); | ||
774 | table->item(row, 1)->setBackground(QBrush(color_map[map[bank].pins[pin].function[fn].group])); | ||
775 | } | ||
776 | else | ||
777 | table->setItem(row, 1, new QTableWidgetItem(QString("<read error>"))); | ||
778 | table->item(row, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); | ||
779 | } | ||
780 | } | ||
781 | } | ||
782 | |||
783 | static TmplAnalyserFactory< PinAnalyser > g_pin_factory(true, "Pin Analyser"); | ||
diff --git a/utils/regtools/qeditor/std_analysers.h b/utils/regtools/qeditor/std_analysers.h index 20bc07da24..e613c07096 100644 --- a/utils/regtools/qeditor/std_analysers.h +++ b/utils/regtools/qeditor/std_analysers.h | |||
@@ -91,4 +91,26 @@ private: | |||
91 | QLineEdit *m_emi_freq_label; | 91 | QLineEdit *m_emi_freq_label; |
92 | }; | 92 | }; |
93 | 93 | ||
94 | /** | ||
95 | * PINCTRL analyzer | ||
96 | */ | ||
97 | class PinAnalyser : public Analyser | ||
98 | { | ||
99 | Q_OBJECT | ||
100 | public: | ||
101 | PinAnalyser(const soc_t& soc, IoBackend *backend); | ||
102 | virtual ~PinAnalyser(); | ||
103 | virtual QWidget *GetWidget(); | ||
104 | |||
105 | static bool SupportSoc(const QString& soc_name); | ||
106 | |||
107 | private: | ||
108 | void FillList(); | ||
109 | |||
110 | private: | ||
111 | QGroupBox *m_group; | ||
112 | QLineEdit *m_package_edit; | ||
113 | QToolBox *m_panel; | ||
114 | }; | ||
115 | |||
94 | #endif /* _STDANALYSER_H_ */ | 116 | #endif /* _STDANALYSER_H_ */ |