~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/arm64/boot/dts/qcom/sm8250-xiaomi-pipa.dts

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/arm64/boot/dts/qcom/sm8250-xiaomi-pipa.dts (Version linux-6.12-rc7) and /arch/i386/boot/dts/qcom/sm8250-xiaomi-pipa.dts (Version linux-4.19.322)


  1 // SPDX-License-Identifier: GPL-2.0-only OR BS    
  2 /*                                                
  3  * Copyright (c) 2023 Luka Panio <lukapanio@gma    
  4  */                                               
  5                                                   
  6 /dts-v1/;                                         
  7                                                   
  8 #include <dt-bindings/arm/qcom,ids.h>             
  9 #include <dt-bindings/phy/phy.h>                  
 10 #include <dt-bindings/regulator/qcom,rpmh-regu    
 11 #include "sm8250.dtsi"                            
 12 #include "pm8150.dtsi"                            
 13 #include "pm8150b.dtsi"                           
 14 #include "pm8150l.dtsi"                           
 15 #include "pm8009.dtsi"                            
 16                                                   
 17 /*                                                
 18  * Delete following upstream (sm8250.dtsi) res    
 19  * memory mappings which are different on this    
 20  */                                               
 21 /delete-node/ &adsp_mem;                          
 22 /delete-node/ &cdsp_secure_heap;                  
 23 /delete-node/ &slpi_mem;                          
 24 /delete-node/ &spss_mem;                          
 25 /delete-node/ &xbl_aop_mem;                       
 26                                                   
 27 / {                                               
 28                                                   
 29         model = "Xiaomi Pad 6";                   
 30         compatible = "xiaomi,pipa", "qcom,sm82    
 31                                                   
 32         chassis-type = "tablet";                  
 33                                                   
 34         /* required for bootloader to select c    
 35         qcom,msm-id = <QCOM_ID_SM8250 0x20001>    
 36         qcom,board-id = <0x34 0>;                 
 37                                                   
 38         chosen {                                  
 39                 #address-cells = <2>;             
 40                 #size-cells = <2>;                
 41                 ranges;                           
 42                                                   
 43                 framebuffer: framebuffer@9c000    
 44                         compatible = "simple-f    
 45                         reg = <0x0 0x9c000000     
 46                         width = <1800>;           
 47                         height = <2880>;          
 48                         stride = <(1800 * 4)>;    
 49                         format = "a8r8g8b8";      
 50                 };                                
 51         };                                        
 52                                                   
 53         battery_l: battery-l {                    
 54                 compatible = "simple-battery";    
 55                 voltage-min-design-microvolt =    
 56                 energy-full-design-microwatt-h    
 57                 charge-full-design-microamp-ho    
 58         };                                        
 59                                                   
 60         battery_r: battery-r {                    
 61                 compatible = "simple-battery";    
 62                 voltage-min-design-microvolt =    
 63                 energy-full-design-microwatt-h    
 64                 charge-full-design-microamp-ho    
 65         };                                        
 66                                                   
 67         bl_vddpos_5p5: bl-vddpos-regulator {      
 68                 compatible = "regulator-fixed"    
 69                 regulator-name = "bl_vddpos_5p    
 70                 regulator-min-microvolt = <550    
 71                 regulator-max-microvolt = <550    
 72                 regulator-enable-ramp-delay =     
 73                 gpio = <&tlmm 130 GPIO_ACTIVE_    
 74                 enable-active-high;               
 75                 regulator-boot-on;                
 76         };                                        
 77                                                   
 78         bl_vddneg_5p5: bl-vddneg-regulator {      
 79                 compatible = "regulator-fixed"    
 80                 regulator-name = "bl_vddneg_5p    
 81                 regulator-min-microvolt = <550    
 82                 regulator-max-microvolt = <550    
 83                 regulator-enable-ramp-delay =     
 84                 gpio = <&tlmm 131 GPIO_ACTIVE_    
 85                 enable-active-high;               
 86                 regulator-boot-on;                
 87         };                                        
 88                                                   
 89         gpio_keys: gpio-keys {                    
 90                 compatible = "gpio-keys";         
 91                                                   
 92                 pinctrl-0 = <&vol_up_n>;          
 93                 pinctrl-names = "default";        
 94                                                   
 95                 key-vol-up {                      
 96                         label = "Volume Up";      
 97                         gpios = <&pm8150_gpios    
 98                         linux,code = <KEY_VOLU    
 99                         debounce-interval = <1    
100                         linux,can-disable;        
101                         wakeup-source;            
102                 };                                
103         };                                        
104                                                   
105         vph_pwr: vph-pwr-regulator {              
106                 compatible = "regulator-fixed"    
107                 regulator-name = "vph_pwr";       
108                 regulator-min-microvolt = <370    
109                 regulator-max-microvolt = <370    
110         };                                        
111                                                   
112         /* S6c is really ebi.lvl but it's ther    
113         vreg_s6c_0p88: smpc6-regulator {          
114                 compatible = "regulator-fixed"    
115                 regulator-name = "vreg_s6c_0p8    
116                 regulator-min-microvolt = <880    
117                 regulator-max-microvolt = <880    
118                 regulator-always-on;              
119                 vin-supply = <&vph_pwr>;          
120         };                                        
121                                                   
122         reserved-memory {                         
123                 xbl_aop_mem: xbl-aop@80700000     
124                         reg = <0x0 0x80600000     
125                         no-map;                   
126                 };                                
127                                                   
128                 slpi_mem: slpi@88c00000 {         
129                         reg = <0x0 0x88c00000     
130                         no-map;                   
131                 };                                
132                                                   
133                 adsp_mem: adsp@8bb00000 {         
134                         reg = <0x0 0x8bb00000     
135                         no-map;                   
136                 };                                
137                                                   
138                 spss_mem: spss@8e000000 {         
139                         reg = <0x0 0x8e000000     
140                         no-map;                   
141                 };                                
142                                                   
143                 cdsp_secure_heap: cdsp-secure-    
144                         reg = <0x0 0x8e100000     
145                         no-map;                   
146                 };                                
147                                                   
148                 cont_splash_mem: cont-splash@9    
149                         reg = <0x0 0x9c000000     
150                         no-map;                   
151                 };                                
152                                                   
153                 ramoops@b0000000 {                
154                         compatible = "ramoops"    
155                         reg = <0x0 0xb0000000     
156                         record-size = <0x1000>    
157                         console-size = <0x2000    
158                         ecc-size = <16>;          
159                         no-map;                   
160                 };                                
161         };                                        
162 };                                                
163                                                   
164 &adsp {                                           
165         firmware-name = "qcom/sm8250/xiaomi/pi    
166         status = "okay";                          
167 };                                                
168                                                   
169 &apps_rsc {                                       
170         regulators-0 {                            
171                 compatible = "qcom,pm8150-rpmh    
172                 qcom,pmic-id = "a";               
173                                                   
174                 vdd-s1-supply = <&vph_pwr>;       
175                 vdd-s2-supply = <&vph_pwr>;       
176                 vdd-s3-supply = <&vph_pwr>;       
177                 vdd-s4-supply = <&vph_pwr>;       
178                 vdd-s5-supply = <&vph_pwr>;       
179                 vdd-s6-supply = <&vph_pwr>;       
180                 vdd-s7-supply = <&vph_pwr>;       
181                 vdd-s8-supply = <&vph_pwr>;       
182                 vdd-s9-supply = <&vph_pwr>;       
183                 vdd-s10-supply = <&vph_pwr>;      
184                 vdd-l1-l8-l11-supply = <&vreg_    
185                 vdd-l2-l10-supply = <&vreg_bob    
186                 vdd-l3-l4-l5-l18-supply = <&vr    
187                 vdd-l6-l9-supply = <&vreg_s8c_    
188                 vdd-l7-l12-l14-l15-supply = <&    
189                 vdd-l13-l16-l17-supply = <&vre    
190                                                   
191                 /* (S1+S2+S3) - cx.lvl (ARC) *    
192                                                   
193                 vreg_s4a_1p8: smps4 {             
194                         regulator-name = "vreg    
195                         regulator-min-microvol    
196                         regulator-max-microvol    
197                         regulator-initial-mode    
198                         regulator-allow-set-lo    
199                         regulator-allowed-mode    
200                                                   
201                 };                                
202                                                   
203                 vreg_s5a_1p9: smps5 {             
204                         regulator-name = "vreg    
205                         regulator-min-microvol    
206                         regulator-max-microvol    
207                         regulator-initial-mode    
208                 };                                
209                                                   
210                 vreg_s6a_0p95: smps6 {            
211                         regulator-name = "vreg    
212                         regulator-min-microvol    
213                         regulator-max-microvol    
214                         regulator-initial-mode    
215                 };                                
216                                                   
217                 vreg_l2a_3p1: ldo2 {              
218                         regulator-name = "vreg    
219                         regulator-min-microvol    
220                         regulator-max-microvol    
221                         regulator-initial-mode    
222                 };                                
223                                                   
224                 vreg_l3a_0p9: ldo3 {              
225                         regulator-name = "vreg    
226                         regulator-min-microvol    
227                         regulator-max-microvol    
228                         regulator-initial-mode    
229                 };                                
230                                                   
231                 /* L4 - lmx.lvl (ARC) */          
232                                                   
233                 vreg_l5a_0p88: ldo5 {             
234                         regulator-name = "vreg    
235                         regulator-min-microvol    
236                         regulator-max-microvol    
237                         regulator-initial-mode    
238                 };                                
239                                                   
240                 vreg_l6a_1p2: ldo6 {              
241                         regulator-name = "vreg    
242                         regulator-min-microvol    
243                         regulator-max-microvol    
244                         regulator-initial-mode    
245                         regulator-allow-set-lo    
246                         regulator-allowed-mode    
247                                                   
248                 };                                
249                                                   
250                 /* L7 is unused. */               
251                                                   
252                 vreg_l9a_1p2: ldo9 {              
253                         regulator-name = "vreg    
254                         regulator-min-microvol    
255                         regulator-max-microvol    
256                         regulator-initial-mode    
257                 };                                
258                                                   
259                 /* L10 is unused, L11 - lcx.lv    
260                                                   
261                 vreg_l12a_1p8: ldo12 {            
262                         regulator-name = "vreg    
263                         regulator-min-microvol    
264                         regulator-max-microvol    
265                         regulator-initial-mode    
266                 };                                
267                                                   
268                 /* L13 is unused. */              
269                                                   
270                 vreg_l14a_1p88: ldo14 {           
271                         regulator-name = "vreg    
272                         regulator-min-microvol    
273                         regulator-max-microvol    
274                         regulator-initial-mode    
275                 };                                
276                                                   
277                 /* L15 & L16 are unused. */       
278                                                   
279                 vreg_l17a_3p0: ldo17 {            
280                         regulator-name = "vreg    
281                         regulator-min-microvol    
282                         regulator-max-microvol    
283                         regulator-initial-mode    
284                         regulator-allow-set-lo    
285                         regulator-allowed-mode    
286                                                   
287                 };                                
288                                                   
289                 vreg_l18a_0p9: ldo18 {            
290                         regulator-name = "vreg    
291                         regulator-min-microvol    
292                         regulator-max-microvol    
293                         regulator-initial-mode    
294                 };                                
295         };                                        
296                                                   
297         regulators-1 {                            
298                 compatible = "qcom,pm8150l-rpm    
299                 qcom,pmic-id = "c";               
300                                                   
301                 vdd-s1-supply = <&vph_pwr>;       
302                 vdd-s2-supply = <&vph_pwr>;       
303                 vdd-s3-supply = <&vph_pwr>;       
304                 vdd-s4-supply = <&vph_pwr>;       
305                 vdd-s5-supply = <&vph_pwr>;       
306                 vdd-s6-supply = <&vph_pwr>;       
307                 vdd-s7-supply = <&vph_pwr>;       
308                 vdd-s8-supply = <&vph_pwr>;       
309                 vdd-l1-l8-supply = <&vreg_s4a_    
310                 vdd-l2-l3-supply = <&vreg_s8c_    
311                 vdd-l4-l5-l6-supply = <&vreg_b    
312                 vdd-l7-l11-supply = <&vreg_bob    
313                 vdd-l9-l10-supply = <&vreg_bob    
314                 vdd-bob-supply = <&vph_pwr>;      
315                                                   
316                 vreg_bob: bob {                   
317                         regulator-name = "vreg    
318                         regulator-min-microvol    
319                         regulator-max-microvol    
320                         regulator-initial-mode    
321                 };                                
322                                                   
323                 /*                                
324                  * S1-S6 are ARCs:                
325                  * (S1+S2) - gfx.lvl,             
326                  * S3 - mx.lvl,                   
327                  * (S4+S5) - mmcx.lvl,            
328                  * S6 - ebi.lvl                   
329                  */                               
330                                                   
331                 vreg_s7c_0p35: smps7 {            
332                         regulator-name = "vreg    
333                         regulator-min-microvol    
334                         regulator-max-microvol    
335                         regulator-initial-mode    
336                 };                                
337                                                   
338                 vreg_s8c_1p35: smps8 {            
339                         regulator-name = "vreg    
340                         regulator-min-microvol    
341                         regulator-max-microvol    
342                         regulator-initial-mode    
343                 };                                
344                                                   
345                 vreg_l1c_1p8: ldo1 {              
346                         regulator-name = "vreg    
347                         regulator-min-microvol    
348                         regulator-max-microvol    
349                         regulator-initial-mode    
350                 };                                
351                                                   
352                 /* L2-4 are unused. */            
353                                                   
354                 vreg_l5c_1p8: ldo5 {              
355                         regulator-name = "vreg    
356                         regulator-min-microvol    
357                         regulator-max-microvol    
358                         regulator-initial-mode    
359                 };                                
360                                                   
361                 vreg_l6c_2p9: ldo6 {              
362                         regulator-name = "vreg    
363                         regulator-min-microvol    
364                         regulator-max-microvol    
365                         regulator-initial-mode    
366                         regulator-allow-set-lo    
367                         regulator-allowed-mode    
368                                                   
369                 };                                
370                                                   
371                 vreg_l7c_2p85: ldo7 {             
372                         regulator-name = "vreg    
373                         regulator-min-microvol    
374                         regulator-max-microvol    
375                         regulator-initial-mode    
376                 };                                
377                                                   
378                 vreg_l8c_1p8: ldo8 {              
379                         regulator-name = "vreg    
380                         regulator-min-microvol    
381                         regulator-max-microvol    
382                         regulator-initial-mode    
383                 };                                
384                                                   
385                 vreg_l9c_2p9: ldo9 {              
386                         regulator-name = "vreg    
387                         regulator-min-microvol    
388                         regulator-max-microvol    
389                         regulator-initial-mode    
390                         regulator-allow-set-lo    
391                         regulator-allowed-mode    
392                                                   
393                 };                                
394                                                   
395                 vreg_l10c_3p3: ldo10 {            
396                         regulator-name = "vreg    
397                         regulator-min-microvol    
398                         regulator-max-microvol    
399                         regulator-initial-mode    
400                 };                                
401                                                   
402                 vreg_l11c_3p0: ldo11 {            
403                         regulator-name = "vreg    
404                         regulator-min-microvol    
405                         regulator-max-microvol    
406                         regulator-initial-mode    
407                 };                                
408         };                                        
409                                                   
410         regulators-2 {                            
411                 compatible = "qcom,pm8009-rpmh    
412                 qcom,pmic-id = "f";               
413                                                   
414                 vdd-s1-supply = <&vph_pwr>;       
415                 vdd-s2-supply = <&vreg_bob>;      
416                 vdd-l2-supply = <&vreg_s8c_1p3    
417                 vdd-l5-l6-supply = <&vreg_bob>    
418                 vdd-l7-supply = <&vreg_s4a_1p8    
419                                                   
420                 vreg_s1f_1p2: smps1 {             
421                         regulator-name = "vreg    
422                         regulator-min-microvol    
423                         regulator-max-microvol    
424                         regulator-initial-mode    
425                 };                                
426                                                   
427                 vreg_s2f_0p5: smps2 {             
428                         regulator-name = "vreg    
429                         regulator-min-microvol    
430                         regulator-max-microvol    
431                         regulator-initial-mode    
432                 };                                
433                                                   
434                 /* L1 is unused. */               
435                                                   
436                 vreg_l2f_1p3: ldo2 {              
437                         regulator-name = "vreg    
438                         regulator-min-microvol    
439                         regulator-max-microvol    
440                         regulator-initial-mode    
441                 };                                
442                                                   
443                 /* L3 & L4 are unused. */         
444                                                   
445                 vreg_l5f_2p8: ldo5 {              
446                         regulator-name = "vreg    
447                         regulator-min-microvol    
448                         regulator-max-microvol    
449                         regulator-initial-mode    
450                 };                                
451                                                   
452                 vreg_l6f_2p8: ldo6 {              
453                         regulator-name = "vreg    
454                         regulator-min-microvol    
455                         regulator-max-microvol    
456                         regulator-initial-mode    
457                 };                                
458                                                   
459                 vreg_l7f_1p8: ldo7 {              
460                         regulator-name = "vreg    
461                         regulator-min-microvol    
462                         regulator-max-microvol    
463                         regulator-initial-mode    
464                 };                                
465         };                                        
466 };                                                
467                                                   
468 &cdsp {                                           
469         firmware-name = "qcom/sm8250/xiaomi/pi    
470         status = "okay";                          
471 };                                                
472                                                   
473 &gmu {                                            
474         status = "okay";                          
475 };                                                
476                                                   
477 &gpi_dma0 {                                       
478         status = "okay";                          
479 };                                                
480                                                   
481 &gpi_dma1 {                                       
482         status = "okay";                          
483 };                                                
484                                                   
485 &gpi_dma2 {                                       
486         status = "okay";                          
487 };                                                
488                                                   
489 &gpu {                                            
490         status = "okay";                          
491                                                   
492         zap-shader {                              
493                 memory-region = <&gpu_mem>;       
494                 firmware-name = "qcom/sm8250/x    
495         };                                        
496 };                                                
497                                                   
498 &i2c0 {                                           
499         clock-frequency = <400000>;               
500         status = "okay";                          
501                                                   
502         fuel-gauge@55 {                           
503                 compatible = "ti,bq27z561";       
504                 reg = <0x55>;                     
505                 monitored-battery = <&battery_    
506         };                                        
507 };                                                
508                                                   
509 &i2c11 {                                          
510         clock-frequency = <400000>;               
511         status = "okay";                          
512                                                   
513         backlight: backlight@11 {                 
514                 compatible = "kinetic,ktz8866"    
515                 reg = <0x11>;                     
516                 vddpos-supply = <&bl_vddpos_5p    
517                 vddneg-supply = <&bl_vddneg_5p    
518                 enable-gpios = <&tlmm 139 GPIO    
519                 current-num-sinks = <5>;          
520                 kinetic,current-ramp-delay-ms     
521                 kinetic,led-enable-ramp-delay-    
522                 kinetic,enable-lcd-bias;          
523         };                                        
524 };                                                
525                                                   
526 &i2c13 {                                          
527         clock-frequency = <400000>;               
528         status = "okay";                          
529                                                   
530         fuel-gauge@55 {                           
531                 compatible = "ti,bq27z561";       
532                 reg = <0x55>;                     
533                 monitored-battery = <&battery_    
534         };                                        
535 };                                                
536                                                   
537 &pcie0 {                                          
538         status = "okay";                          
539 };                                                
540                                                   
541 &pcie0_phy {                                      
542         vdda-phy-supply = <&vreg_l5a_0p88>;       
543         vdda-pll-supply = <&vreg_l9a_1p2>;        
544         status = "okay";                          
545 };                                                
546                                                   
547 &pm8150_gpios {                                   
548         vol_up_n: vol-up-n-state {                
549                 pins = "gpio6";                   
550                 function = "normal";              
551                 power-source = <1>;               
552                 input-enable;                     
553                 bias-pull-up;                     
554         };                                        
555 };                                                
556                                                   
557 &pon_pwrkey {                                     
558         status = "okay";                          
559 };                                                
560                                                   
561 &pon_resin {                                      
562         linux,code = <KEY_VOLUMEDOWN>;            
563         status = "okay";                          
564 };                                                
565                                                   
566 &qupv3_id_0 {                                     
567         status = "okay";                          
568 };                                                
569                                                   
570 &qupv3_id_1 {                                     
571         status = "okay";                          
572 };                                                
573                                                   
574 &qupv3_id_2 {                                     
575         status = "okay";                          
576 };                                                
577                                                   
578 &slpi {                                           
579         firmware-name = "qcom/sm8250/xiaomi/pi    
580         status = "okay";                          
581 };                                                
582                                                   
583 &usb_1 {                                          
584         status = "okay";                          
585 };                                                
586                                                   
587 &usb_1_dwc3 {                                     
588         dr_mode = "peripheral";                   
589 };                                                
590                                                   
591 &usb_1_hsphy {                                    
592         vdda-pll-supply = <&vreg_l5a_0p88>;       
593         vdda18-supply = <&vreg_l12a_1p8>;         
594         vdda33-supply = <&vreg_l2a_3p1>;          
595         status = "okay";                          
596 };                                                
597                                                   
598 &usb_1_qmpphy {                                   
599         status = "okay";                          
600         vdda-phy-supply = <&vreg_l9a_1p2>;        
601         vdda-pll-supply = <&vreg_l18a_0p9>;       
602 };                                                
603                                                   
604 &ufs_mem_hc {                                     
605         vcc-supply = <&vreg_l17a_3p0>;            
606         vcc-max-microamp = <800000>;              
607         vccq-supply = <&vreg_l6a_1p2>;            
608         vccq-max-microamp = <800000>;             
609         vccq2-supply = <&vreg_s4a_1p8>;           
610         vccq2-max-microamp = <800000>;            
611         status = "okay";                          
612 };                                                
613                                                   
614 &ufs_mem_phy {                                    
615         vdda-phy-supply = <&vreg_l5a_0p88>;       
616         vdda-pll-supply = <&vreg_l9a_1p2>;        
617         status = "okay";                          
618 };                                                
619                                                   
620 &venus {                                          
621         firmware-name = "qcom/sm8250/xiaomi/pi    
622         status = "okay";                          
623 };                                                
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php