Skip to content

Commit 8b84909

Browse files
committed
Add support for Samsung Exynos CPUs
1 parent 7bb2b6c commit 8b84909

File tree

2 files changed

+198
-99
lines changed

2 files changed

+198
-99
lines changed

src/config.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ Config::Config(const std::string_view configFile, const std::string_view configD
3636
{
3737
if (!std::filesystem::exists(configDir))
3838
{
39+
#if !ANDROID_APP
3940
warn(_("customfetch config folder was not found, Creating folders at {}!"), configDir);
41+
#endif
4042
std::filesystem::create_directories(configDir);
4143
}
4244

src/query/unix/cpu.cpp

Lines changed: 196 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -44,47 +44,46 @@ using namespace Query;
4444
#if CF_ANDROID
4545
static std::string detect_qualcomm(const std::string& model_name)
4646
{
47-
std::string cpuname = "Qualcomm ";
4847
switch (fnv1a16::hash(model_name))
4948
{
50-
case "SM8750-AB"_fnv1a16: cpuname += "Snapdragon 8 Elite"; break;
51-
case "SM8635"_fnv1a16: cpuname += "Snapdragon 8s Gen 3"; break;
52-
case "SM8650-AC"_fnv1a16: cpuname += "Snapdragon 8 Gen 3 for Galaxy"; break;
53-
case "SM8650"_fnv1a16: cpuname += "Snapdragon 8 Gen 3"; break;
54-
case "SM8550-AC"_fnv1a16: cpuname += "Snapdragon 8 Gen 2 for Galaxy"; break;
55-
case "SM8550"_fnv1a16: cpuname += "Snapdragon 8 Gen 2"; break;
56-
case "SM8475"_fnv1a16: cpuname += "Snapdragon 8+ Gen 1"; break;
57-
case "SM8450"_fnv1a16: cpuname += "Snapdragon 8 Gen 1"; break;
58-
59-
case "SM7450-AB"_fnv1a16: cpuname += "Snapdragon 7 Gen 1"; break;
60-
case "SM7475-AB"_fnv1a16: cpuname += "Snapdragon 7+ Gen 2"; break;
61-
case "SM7435-AB"_fnv1a16: cpuname += "Snapdragon 7s Gen 2"; break;
62-
case "SM7550-AB"_fnv1a16: cpuname += "Snapdragon 7 Gen 3"; break;
63-
case "SM7675-AB"_fnv1a16: cpuname += "Snapdragon 7+ Gen 3"; break;
64-
case "SM7635"_fnv1a16: cpuname += "Snapdragon 7s Gen 3"; break;
65-
66-
case "SM6375-AC"_fnv1a16: cpuname += "Snapdragon 6s Gen 3"; break;
67-
case "SM6475-AB"_fnv1a16: cpuname += "Snapdragon 6 Gen 3"; break;
68-
case "SM6115-AC"_fnv1a16: cpuname += "Snapdragon 6s Gen 1"; break;
69-
case "SM6450"_fnv1a16: cpuname += "Snapdragon 6 Gen 1"; break;
70-
71-
case "SM4635"_fnv1a16: cpuname += "Snapdragon 4s Gen 2"; break;
72-
case "SM4450"_fnv1a16: cpuname += "Snapdragon 4 Gen 2"; break;
73-
case "SM4375"_fnv1a16: cpuname += "Snapdragon 4 Gen 1"; break;
49+
case "SM8750-AB"_fnv1a16: return "Snapdragon 8 Elite";
50+
case "SM8635"_fnv1a16: return "Snapdragon 8s Gen 3";
51+
case "SM8650-AC"_fnv1a16: return "Snapdragon 8 Gen 3 for Galaxy";
52+
case "SM8650"_fnv1a16: return "Snapdragon 8 Gen 3";
53+
case "SM8550-AC"_fnv1a16: return "Snapdragon 8 Gen 2 for Galaxy";
54+
case "SM8550"_fnv1a16: return "Snapdragon 8 Gen 2";
55+
case "SM8475"_fnv1a16: return "Snapdragon 8+ Gen 1";
56+
case "SM8450"_fnv1a16: return "Snapdragon 8 Gen 1";
57+
58+
case "SM7450-AB"_fnv1a16: return "Snapdragon 7 Gen 1";
59+
case "SM7475-AB"_fnv1a16: return "Snapdragon 7+ Gen 2";
60+
case "SM7435-AB"_fnv1a16: return "Snapdragon 7s Gen 2";
61+
case "SM7550-AB"_fnv1a16: return "Snapdragon 7 Gen 3";
62+
case "SM7675-AB"_fnv1a16: return "Snapdragon 7+ Gen 3";
63+
case "SM7635"_fnv1a16: return "Snapdragon 7s Gen 3";
64+
65+
case "SM6375-AC"_fnv1a16: return "Snapdragon 6s Gen 3";
66+
case "SM6475-AB"_fnv1a16: return "Snapdragon 6 Gen 3";
67+
case "SM6115-AC"_fnv1a16: return "Snapdragon 6s Gen 1";
68+
case "SM6450"_fnv1a16: return "Snapdragon 6 Gen 1";
69+
70+
case "SM4635"_fnv1a16: return "Snapdragon 4s Gen 2";
71+
case "SM4450"_fnv1a16: return "Snapdragon 4 Gen 2";
72+
case "SM4375"_fnv1a16: return "Snapdragon 4 Gen 1";
7473

7574
// adding fastfetch's many missing chips names
7675
case "MSM8225Q"_fnv1a16:
7776
case "MSM8625Q"_fnv1a16:
7877
case "MSM8210"_fnv1a16:
7978
case "MSM8610"_fnv1a16:
8079
case "MSM8212"_fnv1a16:
81-
case "MSM8612"_fnv1a16: cpuname += "Snapdragon 200"; break;
80+
case "MSM8612"_fnv1a16: return "Snapdragon 200";
8281

83-
case "MSM8905"_fnv1a16: cpuname += "205"; break; // Qualcomm 205 break;
84-
case "MSM8208"_fnv1a16: cpuname += "Snapdragon 208"; break;
85-
case "MSM8909"_fnv1a16: cpuname += "Snapdragon 210"; break;
86-
case "MSM8909AA"_fnv1a16: cpuname += "Snapdragon 212"; break;
87-
case "QM215"_fnv1a16: cpuname += "215"; break;
82+
case "MSM8905"_fnv1a16: return "205"; // Qualcomm 205
83+
case "MSM8208"_fnv1a16: return "Snapdragon 208";
84+
case "MSM8909"_fnv1a16: return "Snapdragon 210";
85+
case "MSM8909AA"_fnv1a16: return "Snapdragon 212";
86+
case "QM215"_fnv1a16: return "215";
8887

8988
// holy crap
9089
case "APQ8026"_fnv1a16:
@@ -101,88 +100,181 @@ static std::string detect_qualcomm(const std::string& model_name)
101100
case "APQ8030AB"_fnv1a16:
102101
case "MSM8230AB"_fnv1a16:
103102
case "MSM8630AB"_fnv1a16:
104-
case "MSM8930AB"_fnv1a16: cpuname += "Snapdragon 400"; break;
103+
case "MSM8930AB"_fnv1a16: return "Snapdragon 400";
105104

106105
case "APQ8016"_fnv1a16:
107-
case "MSM8916"_fnv1a16: cpuname += "Snapdragon 410"; break;
108-
case "MSM8929"_fnv1a16: cpuname += "Snapdragon 415"; break;
109-
case "MSM8917"_fnv1a16: cpuname += "Snapdragon 425"; break;
110-
case "MSM8920"_fnv1a16: cpuname += "Snapdragon 427"; break;
111-
case "MSM8937"_fnv1a16: cpuname += "Snapdragon 430"; break;
112-
case "MSM8940"_fnv1a16: cpuname += "Snapdragon 435"; break;
113-
case "SDM429"_fnv1a16: cpuname += "Snapdragon 429"; break;
114-
case "SDM439"_fnv1a16: cpuname += "Snapdragon 439"; break;
115-
case "SDM450"_fnv1a16: cpuname += "Snapdragon 450"; break;
116-
case "SM4250-AA"_fnv1a16: cpuname += "Snapdragon 460"; break;
117-
case "SM4350"_fnv1a16: cpuname += "Snapdragon 480"; break;
118-
case "SM4350-AC"_fnv1a16: cpuname += "Snapdragon 480+"; break;
106+
case "MSM8916"_fnv1a16: return "Snapdragon 410";
107+
case "MSM8929"_fnv1a16: return "Snapdragon 415";
108+
case "MSM8917"_fnv1a16: return "Snapdragon 425";
109+
case "MSM8920"_fnv1a16: return "Snapdragon 427";
110+
case "MSM8937"_fnv1a16: return "Snapdragon 430";
111+
case "MSM8940"_fnv1a16: return "Snapdragon 435";
112+
case "SDM429"_fnv1a16: return "Snapdragon 429";
113+
case "SDM439"_fnv1a16: return "Snapdragon 439";
114+
case "SDM450"_fnv1a16: return "Snapdragon 450";
115+
case "SM4250-AA"_fnv1a16: return "Snapdragon 460";
116+
case "SM4350"_fnv1a16: return "Snapdragon 480";
117+
case "SM4350-AC"_fnv1a16: return "Snapdragon 480+";
119118

120119
case "APQ8064-1AA"_fnv1a16:
121120
case "APQ8064M"_fnv1a16:
122121
case "APQ8064T"_fnv1a16:
123-
case "APQ8064AB"_fnv1a16: cpuname += "Snapdragon 600"; break;
124-
125-
case "MSM8936"_fnv1a16: cpuname += "Snapdragon 610"; break;
126-
case "MSM8939"_fnv1a16: cpuname += "Snapdragon 615"; break;
127-
case "MSM8952"_fnv1a16: cpuname += "Snapdragon 617"; break;
128-
case "MSM8953"_fnv1a16: cpuname += "Snapdragon 625"; break;
129-
case "SDM630"_fnv1a16: cpuname += "Snapdragon 630"; break;
130-
case "SDM632"_fnv1a16: cpuname += "Snapdragon 632"; break;
131-
case "SDM636"_fnv1a16: cpuname += "Snapdragon 636"; break;
132-
case "MSM8956"_fnv1a16: cpuname += "Snapdragon 650"; break;
133-
case "MSM8976"_fnv1a16: cpuname += "Snapdragon 652"; break;
122+
case "APQ8064AB"_fnv1a16: return "Snapdragon 600";
123+
124+
case "MSM8936"_fnv1a16: return "Snapdragon 610";
125+
case "MSM8939"_fnv1a16: return "Snapdragon 615";
126+
case "MSM8952"_fnv1a16: return "Snapdragon 617";
127+
case "MSM8953"_fnv1a16: return "Snapdragon 625";
128+
case "SDM630"_fnv1a16: return "Snapdragon 630";
129+
case "SDM632"_fnv1a16: return "Snapdragon 632";
130+
case "SDM636"_fnv1a16: return "Snapdragon 636";
131+
case "MSM8956"_fnv1a16: return "Snapdragon 650";
132+
case "MSM8976"_fnv1a16: return "Snapdragon 652";
134133
case "SDA660"_fnv1a16:
135-
case "SDM660"_fnv1a16: cpuname += "Snapdragon 660"; break;
136-
case "SM6115"_fnv1a16: cpuname += "Snapdragon 662"; break;
137-
case "SM6125"_fnv1a16: cpuname += "Snapdragon 665"; break;
138-
case "SDM670"_fnv1a16: cpuname += "Snapdragon 670"; break;
139-
case "SM6150"_fnv1a16: cpuname += "Snapdragon 675"; break;
140-
case "SM6150-AC"_fnv1a16: cpuname += "Snapdragon 678"; break;
141-
case "SM6225"_fnv1a16: cpuname += "Snapdragon 680"; break;
142-
case "SM6225-AD"_fnv1a16: cpuname += "Snapdragon 685"; break;
143-
case "SM6350"_fnv1a16: cpuname += "Snapdragon 690"; break;
144-
case "SM6375"_fnv1a16: cpuname += "Snapdragon 695"; break;
145-
146-
case "SDM710"_fnv1a16: cpuname += "Snapdragon 710"; break;
147-
case "SDM712"_fnv1a16: cpuname += "Snapdragon 712"; break;
148-
case "SM7125"_fnv1a16: cpuname += "Snapdragon 720G"; break;
149-
case "SM7150-AA"_fnv1a16: cpuname += "Snapdragon 730"; break;
150-
case "SM7150-AB"_fnv1a16: cpuname += "Snapdragon 730G"; break;
151-
case "SM7150-AC"_fnv1a16: cpuname += "Snapdragon 732G"; break;
152-
case "SM7225"_fnv1a16: cpuname += "Snapdragon 750G"; break;
153-
case "SM7250-AA"_fnv1a16: cpuname += "Snapdragon 765"; break;
154-
case "SM7250-AB"_fnv1a16: cpuname += "Snapdragon 765G"; break;
155-
case "SM7250-AC"_fnv1a16: cpuname += "Snapdragon 768G"; break;
156-
case "SM7325"_fnv1a16: cpuname += "Snapdragon 778G"; break;
157-
case "SM7325-AE"_fnv1a16: cpuname += "Snapdragon 778G+"; break;
158-
case "SM7350-AB"_fnv1a16: cpuname += "Snapdragon 780G"; break;
159-
case "SM7325-AF"_fnv1a16: cpuname += "Snapdragon 782G"; break;
134+
case "SDM660"_fnv1a16: return "Snapdragon 660";
135+
case "SM6115"_fnv1a16: return "Snapdragon 662";
136+
case "SM6125"_fnv1a16: return "Snapdragon 665";
137+
case "SDM670"_fnv1a16: return "Snapdragon 670";
138+
case "SM6150"_fnv1a16: return "Snapdragon 675";
139+
case "SM6150-AC"_fnv1a16: return "Snapdragon 678";
140+
case "SM6225"_fnv1a16: return "Snapdragon 680";
141+
case "SM6225-AD"_fnv1a16: return "Snapdragon 685";
142+
case "SM6350"_fnv1a16: return "Snapdragon 690";
143+
case "SM6375"_fnv1a16: return "Snapdragon 695";
144+
145+
case "SDM710"_fnv1a16: return "Snapdragon 710";
146+
case "SDM712"_fnv1a16: return "Snapdragon 712";
147+
case "SM7125"_fnv1a16: return "Snapdragon 720G";
148+
case "SM7150-AA"_fnv1a16: return "Snapdragon 730";
149+
case "SM7150-AB"_fnv1a16: return "Snapdragon 730G";
150+
case "SM7150-AC"_fnv1a16: return "Snapdragon 732G";
151+
case "SM7225"_fnv1a16: return "Snapdragon 750G";
152+
case "SM7250-AA"_fnv1a16: return "Snapdragon 765";
153+
case "SM7250-AB"_fnv1a16: return "Snapdragon 765G";
154+
case "SM7250-AC"_fnv1a16: return "Snapdragon 768G";
155+
case "SM7325"_fnv1a16: return "Snapdragon 778G";
156+
case "SM7325-AE"_fnv1a16: return "Snapdragon 778G+";
157+
case "SM7350-AB"_fnv1a16: return "Snapdragon 780G";
158+
case "SM7325-AF"_fnv1a16: return "Snapdragon 782G";
160159

161160
case "APQ8074AA"_fnv1a16:
162161
case "MSM8274AA"_fnv1a16:
163162
case "MSM8674AA"_fnv1a16:
164163
case "MSM8974AA"_fnv1a16:
165-
case "MSM8274AB"_fnv1a16: cpuname += "Snapdragon 800"; break;
166-
167-
case "APQ8084"_fnv1a16: cpuname += "Snapdragon 805"; break;
168-
case "MSM8992"_fnv1a16: cpuname += "Snapdragon 808"; break;
169-
case "MSM8994"_fnv1a16: cpuname += "Snapdragon 810"; break;
170-
case "MSM8996"_fnv1a16: cpuname += "Snapdragon 820"; break;
171-
case "MSM8998"_fnv1a16: cpuname += "Snapdragon 835"; break;
172-
case "SDM845"_fnv1a16: cpuname += "Snapdragon 845"; break;
173-
case "SM8150"_fnv1a16: cpuname += "Snapdragon 855"; break;
164+
case "MSM8274AB"_fnv1a16: return "Snapdragon 800";
165+
166+
case "APQ8084"_fnv1a16: return "Snapdragon 805";
167+
case "MSM8992"_fnv1a16: return "Snapdragon 808";
168+
case "MSM8994"_fnv1a16: return "Snapdragon 810";
169+
case "MSM8996"_fnv1a16: return "Snapdragon 820";
170+
case "MSM8998"_fnv1a16: return "Snapdragon 835";
171+
case "SDM845"_fnv1a16: return "Snapdragon 845";
172+
case "SM8150"_fnv1a16: return "Snapdragon 855";
174173
case "SM8150P"_fnv1a16:
175-
case "SM8150-AC"_fnv1a16: cpuname += "Snapdragon 855+"; break; // both 855+ and 860 break;
176-
case "SM8250"_fnv1a16: cpuname += "Snapdragon 865"; break;
177-
case "SM8250-AB"_fnv1a16: cpuname += "Snapdragon 865+"; break;
178-
case "SM8250-AC"_fnv1a16: cpuname += "Snapdragon 870"; break;
179-
case "SM8350"_fnv1a16: cpuname += "Snapdragon 888"; break;
180-
case "SM8350-AC"_fnv1a16: cpuname += "Snapdragon 888+"; break;
181-
182-
default: return UNKNOWN;
174+
case "SM8150-AC"_fnv1a16: return "Snapdragon 855+"; // both 855+ and 860
175+
case "SM8250"_fnv1a16: return "Snapdragon 865";
176+
case "SM8250-AB"_fnv1a16: return "Snapdragon 865+";
177+
case "SM8250-AC"_fnv1a16: return "Snapdragon 870";
178+
case "SM8350"_fnv1a16: return "Snapdragon 888";
179+
case "SM8350-AC"_fnv1a16: return "Snapdragon 888+";
183180
}
184181

185-
return cpuname + " [" + model_name + "]";
182+
return UNKNOWN;
183+
}
184+
185+
static std::string detect_exynos(const std::string& model_name)
186+
{
187+
switch (fnv1a16::hash(str_toupper(model_name)))
188+
{
189+
case "S5E3830"_fnv1a16: return "Exynos 850";
190+
case "S5E8805"_fnv1a16: return "Exynos 880";
191+
192+
case "S5E9630"_fnv1a16: return "Exynos 980";
193+
case "S5E9830"_fnv1a16: return "Exynos 990";
194+
195+
case "S5E9815"_fnv1a16: return "Exynos 1080";
196+
case "S5E8825"_fnv1a16: return "Exynos 1280";
197+
case "S5E8535"_fnv1a16: return "Exynos 1330";
198+
case "S5E8835"_fnv1a16: return "Exynos 1380";
199+
case "S5E8845"_fnv1a16: return "Exynos 1480";
200+
case "S5E8855"_fnv1a16: return "Exynos 1580";
201+
/* TODO: alot of SoCs with no ID mentioned on Wikipedia.. */
202+
203+
case "S5E9840"_fnv1a16: return "Exynos 2100";
204+
case "S5E9925"_fnv1a16: return "Exynos 2200";
205+
case "S5E9945"_fnv1a16: return "Exynos 2400[e]";
206+
207+
case "S5PC110"_fnv1a16: return "Exynos 3 Single 3110";
208+
case "S5E3470"_fnv1a16: return "Exynos 3 Quad 3470";
209+
/* TODO: ASSUMPTION!! I could not find the full part number for this, I'm making an assumption here. */
210+
case "S5E3475"_fnv1a16: return "Exynos 3 Quad 3475";
211+
212+
case "S5E4210"_fnv1a16:
213+
case "S5PC210"_fnv1a16: return "Exynos 4 Dual 4210";
214+
215+
case "S5E4212"_fnv1a16: return "Exynos 4 Dual 4212";
216+
217+
case "S55E4210"_fnv1a16:
218+
case "S5PC220"_fnv1a16: return "Exynos 4 Quad 4412";
219+
220+
/* TODO: Exynos 4 Quad 4415 */
221+
222+
case "S5E5250"_fnv1a16:
223+
case "S5PC520"_fnv1a16: return "Exynos 5 Dual 5250";
224+
225+
case "S5E5260"_fnv1a16: return "Exynos 5 Hexa 5260";
226+
227+
case "S5E5410"_fnv1a16: return "Exynos 5 Octa 5410";
228+
229+
case "S5E5420"_fnv1a16: return "Exynos 5 Octa 5420";
230+
231+
/* 5800 for chromebooks */
232+
case "S5E5422"_fnv1a16: return "Exynos 5 Octa 5422/5800";
233+
234+
case "S5E5430"_fnv1a16: return "Exynos 5 Octa 5430";
235+
236+
case "S5E5433"_fnv1a16: return "Exynos 7 Octa 5433";
237+
238+
case "SC57270"_fnv1a16: return "Exynos 7 Dual 7270";
239+
240+
case "S5E7420"_fnv1a16: return "Exynos 7 Octa 7420";
241+
242+
case "S5E7570"_fnv1a16: return "Exynos 7 Quad 7570";
243+
/* TODO: Exynos 7 Quad/Octa 7578/7580 */
244+
245+
case "S5E7870"_fnv1a16: return "Exynos 7 Octa 7870";
246+
247+
case "S5E7872"_fnv1a16: return "Exynos 5 7872";
248+
249+
case "S5E7880"_fnv1a16: return "Exynos 7880";
250+
251+
case "S5E7884"_fnv1a16: return "Exynos 7884/7885";
252+
case "S5E7904"_fnv1a16: return "Exynos 7904";
253+
254+
case "S5E8890"_fnv1a16: return "Exynos 8 Octa 8890";
255+
case "S5E8895"_fnv1a16: return "Exynos 8895";
256+
257+
case "S5E9609"_fnv1a16: return "Exynos 9609";
258+
case "S5E9610"_fnv1a16: return "Exynos 9610";
259+
case "S5E9611"_fnv1a16: return "Exynos 9611";
260+
261+
case "S5E9810"_fnv1a16: return "Exynos 9810";
262+
263+
case "S5E9820"_fnv1a16: return "Exynos 9820";
264+
case "S5E9825"_fnv1a16: return "Exynos 9825";
265+
266+
case "S5E4212"_fnv1a16: return "Exynos 4 Dual 4212";
267+
/* TODO: Exynos 3 Dual 3250 */
268+
269+
case "SC57270"_fnv1a16: return "Exynos 7 Dual 7270";
270+
271+
case "SC59110XSC"_fnv1a16: return "Exynos 9110";
272+
case "SC55515XBD"_fnv1a16: return "Exynos W920";
273+
case "SC55515XBE"_fnv1a16: return "Exynos W930";
274+
case "SC55535AHA"_fnv1a16: return "Exynos W1000";
275+
}
276+
277+
return UNKNOWN;
186278
}
187279
#endif
188280

@@ -242,7 +334,12 @@ static CPU::CPU_t get_cpu_infos()
242334
if ((ret.vendor == "QTI" || ret.vendor == "QUALCOMM") &&
243335
(hasStart(ret.modelname, "SM") || hasStart(ret.modelname, "APQ") || hasStart(ret.modelname, "MSM") ||
244336
hasStart(ret.modelname, "SDM") || hasStart(ret.modelname, "QM")))
245-
ret.name = detect_qualcomm(ret.modelname);
337+
ret.name = fmt::format("Qualcomm {} [{}]", detect_qualcomm(ret.modelname), ret.modelname);
338+
else if (ret.vendor == "Samsung") {
339+
ret.name = fmt::format("Samsung {} [{}]", detect_exynos(ret.modelname), ret.modelname);
340+
}
341+
else
342+
ret.name = ret.vendor + " " + ret.modelname;
246343
}
247344
#endif
248345

0 commit comments

Comments
 (0)