summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/regtools/qeditor/mainwindow.cpp2
-rw-r--r--utils/regtools/qeditor/std_analysers.cpp146
-rw-r--r--utils/regtools/qeditor/std_analysers.h22
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
105void MainWindow::OnNewRegTab() 105void 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
639static TmplAnalyserFactory< EmiAnalyser > g_emi_factory(true, "EMI Analyser"); \ No newline at end of file 639static TmplAnalyserFactory< EmiAnalyser > g_emi_factory(true, "EMI Analyser");
640
641/**
642 * Pin analyser
643 */
644
645namespace pin_desc
646{
647#include "../../imxtools/misc/map.h"
648}
649
650PinAnalyser::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
672PinAnalyser::~PinAnalyser()
673{
674}
675
676QWidget *PinAnalyser::GetWidget()
677{
678 return m_group;
679}
680
681bool PinAnalyser::SupportSoc(const QString& soc_name)
682{
683 return soc_name == "imx233" || soc_name == "stmp3700";
684}
685
686void 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
783static 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 */
97class PinAnalyser : public Analyser
98{
99 Q_OBJECT
100public:
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
107private:
108 void FillList();
109
110private:
111 QGroupBox *m_group;
112 QLineEdit *m_package_edit;
113 QToolBox *m_panel;
114};
115
94#endif /* _STDANALYSER_H_ */ 116#endif /* _STDANALYSER_H_ */