diff options
Diffstat (limited to 'utils/regtools')
-rw-r--r-- | utils/regtools/qeditor/std_analysers.cpp | 60 |
1 files changed, 47 insertions, 13 deletions
diff --git a/utils/regtools/qeditor/std_analysers.cpp b/utils/regtools/qeditor/std_analysers.cpp index 0cb7533459..ba33d723b9 100644 --- a/utils/regtools/qeditor/std_analysers.cpp +++ b/utils/regtools/qeditor/std_analysers.cpp | |||
@@ -741,12 +741,35 @@ void PinAnalyser::FillList() | |||
741 | for(int bank = 0; bank < 4; bank++) | 741 | for(int bank = 0; bank < 4; bank++) |
742 | { | 742 | { |
743 | QTableWidget *table = new QTableWidget; | 743 | QTableWidget *table = new QTableWidget; |
744 | table->setColumnCount(2); | 744 | table->setColumnCount(6); |
745 | table->setHorizontalHeaderItem(0, new QTableWidgetItem("Pin")); | 745 | table->setHorizontalHeaderItem(0, new QTableWidgetItem("Pin")); |
746 | table->setHorizontalHeaderItem(1, new QTableWidgetItem("Function")); | 746 | table->setHorizontalHeaderItem(1, new QTableWidgetItem("Function")); |
747 | table->setHorizontalHeaderItem(2, new QTableWidgetItem("Drive")); | ||
748 | table->setHorizontalHeaderItem(3, new QTableWidgetItem("Voltage")); | ||
749 | table->setHorizontalHeaderItem(4, new QTableWidgetItem("Value")); | ||
750 | table->setHorizontalHeaderItem(5, new QTableWidgetItem("Pull")); | ||
747 | table->verticalHeader()->setVisible(false); | 751 | table->verticalHeader()->setVisible(false); |
748 | table->horizontalHeader()->setStretchLastSection(true); | 752 | table->horizontalHeader()->setStretchLastSection(true); |
749 | m_panel->addItem(table, QString("Bank %1").arg(bank)); | 753 | m_panel->addItem(table, QString("Bank %1").arg(bank)); |
754 | uint32_t muxsel[2], drive[4], pull, in, out, oe; | ||
755 | bool error = false; | ||
756 | for(int i = 0; i < 2; i++) | ||
757 | if(!helper.ReadRegister("PINCTRL", QString("MUXSEL%1").arg(bank * 2 + i), muxsel[i])) | ||
758 | error = true; | ||
759 | /* don't make an error for those since some do not exist */ | ||
760 | for(int i = 0; i < 4; i++) | ||
761 | if(!helper.ReadRegister("PINCTRL", QString("DRIVE%1").arg(bank * 4 + i), drive[i])) | ||
762 | drive[i] = 0; | ||
763 | if(error) | ||
764 | continue; | ||
765 | if(!helper.ReadRegister("PINCTRL", QString("PULL%1").arg(bank), pull)) | ||
766 | pull = 0; | ||
767 | if(!helper.ReadRegister("PINCTRL", QString("DIN%1").arg(bank), in)) | ||
768 | in = 0; | ||
769 | if(!helper.ReadRegister("PINCTRL", QString("DOUT%1").arg(bank), out)) | ||
770 | out = 0; | ||
771 | if(!helper.ReadRegister("PINCTRL", QString("DOE%1").arg(bank), oe)) | ||
772 | oe = 0; | ||
750 | 773 | ||
751 | for(int pin = 0; pin < 32; pin++) | 774 | for(int pin = 0; pin < 32; pin++) |
752 | { | 775 | { |
@@ -760,22 +783,33 @@ void PinAnalyser::FillList() | |||
760 | /* add line */ | 783 | /* add line */ |
761 | int row = table->rowCount(); | 784 | int row = table->rowCount(); |
762 | table->setRowCount(row + 1); | 785 | table->setRowCount(row + 1); |
763 | /* pin name */ | 786 | /* name */ |
764 | table->setItem(row, 0, new QTableWidgetItem(QString("B%1P%2") | 787 | table->setItem(row, 0, new QTableWidgetItem(QString("B%1P%2") |
765 | .arg(bank).arg(pin, 2, 10, QChar('0')))); | 788 | .arg(bank).arg(pin, 2, 10, QChar('0')))); |
766 | table->item(row, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); | 789 | table->item(row, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); |
767 | /* pin function */ | 790 | /* function */ |
768 | int fn = -1; | 791 | int fn = (muxsel[pin / 16] >> ((pin % 16) * 2)) & 3; |
769 | if(helper.ReadRegister("PINCTRL", QString("MUXSEL%1").arg(bank * 2 + pin / 16), value)) | 792 | table->setItem(row, 1, new QTableWidgetItem(QString(map[bank].pins[pin].function[fn].name))); |
770 | fn = (value >> ((pin % 16) * 2)) & 3; | 793 | table->item(row, 1)->setBackground(QBrush(color_map[map[bank].pins[pin].function[fn].group])); |
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); | 794 | table->item(row, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); |
795 | /* drive */ | ||
796 | int drv = (drive[pin / 8] >> ((pin % 8) * 4)) & 3; | ||
797 | const char *strength[4] = {"4 mA", "8 mA", "12 mA", "16 mA"}; | ||
798 | table->setItem(row, 2, new QTableWidgetItem(QString(strength[drv]))); | ||
799 | table->item(row, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); | ||
800 | /* voltage */ | ||
801 | int volt = (drive[pin / 8] >> (((pin % 8) * 4) + 2)) & 1; | ||
802 | if(m_io_backend->GetSocName() == "imx233") | ||
803 | volt = 1; /* cannot change voltage on imx233 */ | ||
804 | const char *voltage[2] = {"1.8 V", "3.3 V"}; | ||
805 | table->setItem(row, 3, new QTableWidgetItem(QString(voltage[volt]))); | ||
806 | table->item(row, 3)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); | ||
807 | /* value */ | ||
808 | table->setItem(row, 4, new QTableWidgetItem(QString("%1").arg((in >> pin) & 1))); | ||
809 | table->item(row, 4)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); | ||
810 | /* pull */ | ||
811 | table->setItem(row, 5, new QTableWidgetItem(QString("%1").arg((pull >> pin) & 1))); | ||
812 | table->item(row, 5)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); | ||
779 | } | 813 | } |
780 | } | 814 | } |
781 | } | 815 | } |